useLazyFetch
Обёртка над useFetch: навигация не ждёт завершения запроса.
useLazyFetch — обёртка над useFetch, которая запускает навигацию до завершения обработчика за счёт lazy: true.
Использование
По умолчанию useFetch блокирует навигацию до завершения асинхронного обработчика. useLazyFetch позволяет сразу перейти по маршруту, пока данные подгружаются в фоне.
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">
<!-- обработка post -->
</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(string | Request | Ref<string | Request> | () => string | Request): адрес илиRequest.options(object): как вuseFetch, с автоматическимlazy: true.
Возвращаемые значения
Тот же объект AsyncData, что у useFetch:
| Имя | Тип | Описание |
|---|---|---|
data | Ref<DataT | undefined> | Результат асинхронного запроса. |
refresh | (opts?: AsyncDataExecuteOptions) => Promise<void> | Ручное обновление. |
execute | (opts?: AsyncDataExecuteOptions) => Promise<void> | Синоним refresh. |
error | Ref<ErrorT | undefined> | Ошибка при неудаче. |
status | Ref<'idle' | 'pending' | 'success' | 'error'> | Статус запроса. |
pending | Ref<boolean> | true, пока запрос выполняется. |
clear | () => void | Сброс data, error, status, отмена ожидающих запросов. |
Примеры
Состояние загрузки
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">
<!-- обработка post -->
</div>
</div>
</template>