React Query 中 useInfiniteQuery 与 QueryClientProvider 用法有何区别?

What are the difference between useInfiniteQuery vs QueryClientProvider usage in React Query?

所以我对 QueryClientProvideruseInfiniteQuery 的优选用法感到困惑。我同时在某些渲染组件上使用 useInfiniteQuery 函数作为全局状态。然后我遇到了一个问题,其中有一个尚未渲染的组件使用相同的 useInfiniteQuery 获取相同的数据。当组件被触发渲染时,它会导致 useInfiniteQuery 再次获取。我通过将 enabledqueryOptions 设置为 false 解决了这个问题,因此 useInfiniteQuery 不会自动获取。

Sandbox Code(注意:您可能希望将网络设置为慢速 3G,并尝试使用 enabled: false 查询选项)。

这是使用 React Query 的首选方式还是我只使用 QueryClientProvider 更好?这两种选择有什么优缺点吗?

推荐的方法是始终在组件中使用挂钩,useQueryuseInfiniteQuery。默认情况下,当使用查询的组件安装时,陈旧的查询将在后台重新获取 - 如果数据存在,您将立即获得数据。

如果您不希望后台重新获取,最好的方法是为您的查询设置 staleTime。您也可以关闭 refetchOnMount,但首选设置 staleTime,因为它将处理各种背景重新获取(例如 onWindowFocus)。更多信息:https://tkdodo.eu/blog/react-query-as-a-state-manager