使用react-query,如何打开和关闭重新获取间隔,而无需在查询客户端上调用重置?
我有一个查询客户端,其默认选项中包含重新获取间隔:
new QueryClient({
defaultOptions: {
queries: {
refetchInterval: 1000,
},
},
})
并像这样构建悬念查询:
const query = useSuspenseQuery({queryKey: ['example'], queryFn: exampleFn});
然后在我的应用程序的其他地方我正在获取查询客户端:
const queryClient = useQueryClient();
并在函数中切换重新获取间隔,如下所示:
const handlePlayback = (play: boolean) => {
queryClient.setDefaultOptions({
queries: {
refetchInterval: play ? 1000 : false,
}
})
}
这本身没有任何作用。这是有道理的,因为默认选项已经应用于相关查询。调用 refetch、invalidate 等不会使用新选项更新查询。这个没关系。
我现在打电话
queryClient.resetQueries();
我的问题是,因为我在悬念中使用悬念查询,所以使用查询的组件在每次切换时都会重新挂起。使用延迟状态不起作用,因为查询仍处于挂起状态。 有没有一种方法可以调整重新获取间隔而不需要重置。 谢谢。
最好的方法可能是不使用
setDefaultOptions
来设置选项,而是将一个函数传递到使用相同逻辑的 refetchInterval 中,比如
const query = useSuspenseQuery({
queryKey: ['example'],
queryFn: exampleFn,
refetchInterval: () => play ? 1000 : false
});