Nuxt Nation conference is coming. Join us on November 12-13.
В Nuxt 3 вы можете получить доступ к контексту приложения в композаблах, компонентах и плагинах.

В Nuxt 3 вы можете получить доступ к контексту приложения в композаблах, компонентах и плагинах.

В Nuxt 2 это называлось контекст Nuxt.

Интерфейс приложения Nuxt

Перейдите к документации интерфейса NuxtApp.

Контекст Nuxt

Многие композаблы и утилиты - как встроенные, так и пользовательские - могут получить доступ к инстансу Nuxt. Его можно получить не везде в приложении, потому что при каждом запросе создается новый экземпляр.

Пока что контекст Nuxt доступен только в плагинах, Nuxt-хуках, Nuxt middleware, и setup-функциях (в страницах и компонентах).

Если композабл вызывается вне контекста, вы можете получить ошибку "A composable that requires access to the Nuxt instance was called outside of a plugin, Nuxt hook, Nuxt middleware, or Vue setup function.". В этом случае вы можете явно вызвать функцию в контексте, используя nuxtApp.runWithContext.

Доступ к NuxtApp

Внутри композаблов, плагинов и компонентов вы можете получить доступ к nuxtApp с помощью useNuxtApp():

composables/useMyComposable.ts
export function useMyComposable () {
  const nuxtApp = useNuxtApp()
  // доступ к экземпляру приложения nuxt 
}

Если ваш композабл не всегда нуждается в доступе к контексту nuxtApp или вы просто хотите проверить его наличие или отсутствие, поскольку useNuxtApp выбрасывает исключение, то вы можете использовать tryUseNuxtApp вместо этого.

Плагины также получают nuxtApp в качестве первого аргумента для удобства.

Узнать больше Docs > Guide > Directory Structure > Plugins.

Предоставление хелпер-функций

Вы можете предоставить функции, чтобы они были доступны во всех композаблах и приложении. Обычно это используется внутри плагинов Nuxt.

const nuxtApp = useNuxtApp()
nuxtApp.provide('hello', (name) => `Hello ${name}!`)

console.log(nuxtApp.$hello('name')) // Выведет "Hello name!"
В плагинах можно внедрять хелперы, возвращая объект с ключом provide.
В плагинах Nuxt 2 это называлось inject-функция.