查詢的 status === 'pending' 狀態足以顯示查詢的初始硬載入狀態,但有時您可能希望顯示額外的指示器,表示查詢正在背景中重新擷取。為此,查詢還提供了一個 isFetching 布林值,您可以用來顯示它正在擷取狀態,無論 status 變數的狀態為何:
<script setup>
import { useQuery } from '@tanstack/vue-query'
const { isPending, isFetching, isError, data, error } = useQuery({
queryKey: ['todos'],
queryFn: getTodos,
})
</script>
<template>
<div v-if="isFetching">正在重新整理...</div>
<span v-if="isPending">載入中...</span>
<span v-else-if="isError">錯誤:{{ error.message }}</span>
<!-- 此時我們可以假設 `isSuccess === true` -->
<ul v-else-if="data">
<li v-for="todo in data" :key="todo.id">{{ todo.title }}</li>
</ul>
</template>
<script setup>
import { useQuery } from '@tanstack/vue-query'
const { isPending, isFetching, isError, data, error } = useQuery({
queryKey: ['todos'],
queryFn: getTodos,
})
</script>
<template>
<div v-if="isFetching">正在重新整理...</div>
<span v-if="isPending">載入中...</span>
<span v-else-if="isError">錯誤:{{ error.message }}</span>
<!-- 此時我們可以假設 `isSuccess === true` -->
<ul v-else-if="data">
<li v-for="todo in data" :key="todo.id">{{ todo.title }}</li>
</ul>
</template>
除了個別查詢的載入狀態外,如果您希望在任何查詢正在擷取時(包括在背景中)顯示全域載入指示器,可以使用 useIsFetching 鉤子 (hook):
<script setup>
import { useIsFetching } from '@tanstack/vue-query'
const isFetching = useIsFetching()
</script>
<template>
<div v-if="isFetching">查詢正在背景中擷取...</div>
</template>
<script setup>
import { useIsFetching } from '@tanstack/vue-query'
const isFetching = useIsFetching()
</script>
<template>
<div v-if="isFetching">查詢正在背景中擷取...</div>
</template>