在Redux工具箱查询中,我们在mutations中编写如下代码:
const [purchase, { isLoading, isError, isSuccess, reset }] = useCreateOneSaleMutation()
,可以使用复位方法重置状态。
是否有一种方法,我可以做同样的查询挂钩?
const { isLoading, isError, isSuccess, reset } = useGetOneSale()
- 我们可以做实际存在的
refetch
,但我需要一些东西来重置这些状态在一个组件调用时,所以我需要一个reset方法。
redux工具箱查询是否支持?
我在useEffect中依赖isSuccess
来渲染一些逻辑,并且我需要这个isSuccess
在组件卸载时重置回false。
我有一个模态,当这个模态关闭时,它应该重置回false,因为useEffect看起来如下:
useEffect(()=>{
switch(true){
case isSuccess:
setText('Transaction completed successfully!')
break
default:
setText('Please Enter The client id')
}
}, [isSuccess])
所以一定有像
这样的东西useEffect(()=> ()=> reset())
,以使这种逻辑工作。
RTK Query通过"标记"处理这种类型的查询重置。查看文档中自动重新抓取部分。
在定义API端点的地方,您将说getOneSale
查询提供一个名为"OneSale"
的标签(或者你想叫它什么)。然后说您的createOneSale
突变使无效标签。const api = createApi({
baseQuery: /* ... */,
tagTypes: ['OneSale'],
endpoints: (build) => ({
getOneSale: build.query({
query: /* ... */,
providesTags: ['OneSale'],
}),
createOneSale : build.mutation({
query: /* ... */,
invalidatesTags: ['OneSale'],
}),
}),
})
当你的useCreateOneSaleMutation
执行调用成功时,它将使'OneSale'
标签无效,RTK将自动重新获取任何useGetOneSaleQuery
钩子。
如果您需要通过其他方式(而不是通过突变)使标记无效,您可以通过调度invalidateTags
操作来完成此操作。
dispatch(api.util.invalidateTags(['OneSale']));