1. useQuery 时候查询失败,页面报错
Uncaught Error: No
app.use(ElementPlus)
app.use(VueQueryPlugin)
app.mount('#app')
app.use(ElementPlus)
app.mount('#app')
app.use(VueQueryPlugin)
useMutation isPending status 状态不共享
- 父组件显示 count, 子组件 有一个按钮让 count +1, 将useMutation 中的 isPending 进行显示,始终为false,查看status,也一直是 idle
- 分析可能是由于触发的地方才更新相应的数据,导致 父组件点击按钮,父组件的status更新,子组件点击按钮,子组件的status更新,两者并不共享
- 而useQuery 的isFetching状态却可以共享
import {useMutation, useQuery, useQueryClient} from '@tanstack/vue-query'
import {get, update} from "@/demos/hookRemote/apis";
export const useCount = () => {
const queryClient = useQueryClient()
const {mutate,status}= useMutation({
mutationKey: ["addCount"],
mutationFn: () => update(),
onSuccess: () => {
queryClient.invalidateQueries({queryKey: ["get"]})
}
})
const { data, isFetching } = useQuery({
queryKey: ["get"],
queryFn: async() => {
const data = await get();
return data.data.count;
}
})
return {data, isFetching, status, mutate}
}
<template>
<div>父组件:
<span>{{ data }}</span>
<div>{{isFetching ? "获取中" : "获取成功"}}</div>
<div>{{status}}</div>
<div @click="mutate"><button>父组件添加</button></div>
</div>
<hr/>
<HookDemo2></HookDemo2>
</template>
<script setup>
import HookDemo2 from "@/demos/hookRemote/hookDemo2.vue";
import {useCount} from "@/demos/hookRemote/hooks";
const {data, isFetching, status, mutate} = useCount();
</script>
<template>
<div>子组件:
<span>{{ data }}</span>
<div>{{isFetching ? "获取中" : "获取成功"}}</div>
<div>{{status}}</div>
<div @click="mutate"><button>子组件添加</button></div>
</div>
</template>
<script setup>
import {useCount} from "@/demos/hookRemote/hooks";
const {data,isFetching,status,mutate} = useCount();
</script>