useLazyFetch
Обёртка над useFetch: навигация выполняется сразу, без ожидания загрузки.
useLazyFetch — обёртка над useFetch с опцией lazy: true: навигация выполняется до завершения загрузки.
Использование
По умолчанию useFetch блокирует переход до завершения загрузки. useLazyFetch не блокирует: переход происходит сразу, данные подгружаются в фоне.
app/pages/index.vue
<script setup lang="ts">
const { status, data: posts } = await useLazyFetch('/api/posts')
</script>
<template>
<div v-if="status === 'pending'">
Загрузка ...
</div>
<div v-else>
<div v-for="post in posts">
<!-- ... -->
</div>
</div>
</template>
Сигнатура
useLazyFetch совпадает с useFetch.await
useLazyFetch только инициирует запрос. При клиентской навигации данные могут быть ещё не готовы — обрабатывайте состояние pending в шаблоне.useLazyFetch — зарезервированное имя, обрабатываемое компилятором; не называйте так свои функции.Тип
Signature
export function useLazyFetch<DataT, ErrorT> (
url: string | Request | Ref<string | Request> | (() => string | Request),
options?: UseFetchOptions<DataT>,
): Promise<AsyncData<DataT, ErrorT>>
Параметры
Те же, что у useFetch:
URL: URL или объект запроса.options: опции как уuseFetch, при этомlazyавтоматическиtrue.
Возвращаемые значения
Тот же объект AsyncData, что и у useFetch:
| Имя | Тип | Описание |
|---|---|---|
data | Ref<DataT | undefined> | Результат запроса. |
refresh | (opts?: AsyncDataExecuteOptions) => Promise<void> | Ручное обновление данных. |
execute | то же | Алиас для refresh. |
error | Ref<ErrorT | undefined> | Ошибка при сбое загрузки. |
status | Ref<'idle' | 'pending' | 'success' | 'error'> | Статус запроса. |
clear | () => void | Сброс данных, ошибки, статуса и отмена запросов. |
Примеры
Обработка состояния загрузки
app/pages/index.vue
<script setup lang="ts">
/* Навигация произойдёт до завершения загрузки.
* Обрабатывайте состояния 'pending' и 'error' в шаблоне.
*/
const { status, data: posts } = await useLazyFetch('/api/posts')
watch(posts, (newPosts) => {
// posts изначально может быть null — можно следить через watch
})
</script>
<template>
<div v-if="status === 'pending'">
Загрузка ...
</div>
<div v-else>
<div v-for="post in posts">
<!-- ... -->
</div>
</div>
</template>