Получение данных в Nuxt (data fetching)
Существует несколько основных способов получения данных от Nitro API или другого бекенда
1. $fetch
Метод реализован в библиотеке ofetch
Данный метод рекомендуется использовать на стороне клиента для реакции на действия пользователя.
Не рекомендуется ипользовать $fetch в script setup
, так как это приведет к двойному запросу информации,
один раз на сервере, во время SSR, второй раз на клиенте во время гидрации.
Это может вызвать ошибки гидрации, и увеличить время до начала взаимодействия со страницей.
2. useAsyncData()
useAsyncData решает проблему двойного запроса данных. Данные запрашиваются только на сервере, во время SSR, и передаются на клиент через useNuxtApp().payload
.
Переданные на клиент данные используются во время гидрации и не запрашиваются второй раз.
key
Первым параметром может быть передан в явном виде ключ дедуплекации Если он опущен то будет сгенерирован автоматически на основе имени файла и номера строки. Рекомендуется всегда указывать этот ключ явно во избежании неопределенного поведения. Данный ключ используется на стороне клиента для выборки данных, полученых на сервере. Так же этот ключ используется для управления состоянием
asyncFunction
Асинхронная функция, которая реально получает данные, в самом простом варианте () => $fetch(url)
params
Возможные параметры:
server
: указывает, следует ли получать данные на сервере (по умолчаниюtrue
)
Если данные не были получены на сервере, они не будут запрашиваться до завершения гидрации. Это означает, что даже если вы используетеawait useAsyncData
на стороне клиента, данные останутсяnull
внутри<script setup>
.lazy
: указывает, следует ли разрешать асинхронную функцию после загрузки, вместо блокировки навигации на стороне клиента (по умолчаниюfalse
)immediate
: если установить вfalse
, предотвратит немедленный запрос. (по умолчаниюtrue
)default
: фабричная функция для установки значения данных по умолчанию до получения данных - полезно в сочетании сlazy: true
илиimmediate: false
transform
: функция, которая может использоваться для преобразования данных после полученияgetCachedData
: Предоставьте функцию, которая возвращает кэшированные данные. Возвращаемое значениеnull
илиundefined
вызовет запрос.
Кэширование данных происходит только при включенииexperimental.payloadExtraction
вnuxt.config
.
По умолчанию это:pick
: выбирает только указанные ключи из полученных данныхwatch
: наблюдает за реактивными источниками для автоматического обновления данныхdeep
: возвращает данные в объекте глубокогоref
(по умолчаниюtrue
). Можно установить вfalse
, чтобы вернуть данные вshallow ref
, что может повысить производительность, если ваши данные не нуждаются в глубокой реактивности.dedupe
: избегает многократного запроса одного и того же ключа одновременно (по умолчаниюcancel
). Возможные варианты:cancel
- отменяет существующие запросы при создании новогоdefer
- не делает новых запросов, если есть ожидающий запрос
Возвращаемые данные
data
: результат асинхронной функции, переданной в обработчик.refresh/execute
: функция, которая может быть использована для обновления данных, возвращенных функцией-обработчиком.clear
: функция, которая установитdata
вundefined
,error
вnull
,status
вidle
и отметит все текущие запросы как отмененные.error
: объект ошибки, если получение данных не удалось.status
: строка, указывающая статус запроса данных:idle
: когда запрос не начался, например: когда execute еще не был вызван и { immediate: false } установлен когда рендерится HTML на сервере и { server: false } установленpending
: запрос в процессеsuccess
: запрос выполнен успешноerror
: запрос не удался
3. useFetch()
useFetch(url)
очень похоже на useAsyncData(url, () => event.$fetch(url))
.