React Query 中 useInfiniteQuery 与 QueryClientProvider 用法有何区别?
What are the difference between useInfiniteQuery vs QueryClientProvider usage in React Query?
所以我对 QueryClientProvider
和 useInfiniteQuery
的优选用法感到困惑。我同时在某些渲染组件上使用 useInfiniteQuery
函数作为全局状态。然后我遇到了一个问题,其中有一个尚未渲染的组件使用相同的 useInfiniteQuery
获取相同的数据。当组件被触发渲染时,它会导致 useInfiniteQuery
再次获取。我通过将 enabled
的 queryOptions
设置为 false
解决了这个问题,因此 useInfiniteQuery
不会自动获取。
Sandbox Code(注意:您可能希望将网络设置为慢速 3G,并尝试使用 enabled: false
查询选项)。
这是使用 React Query 的首选方式还是我只使用 QueryClientProvider
更好?这两种选择有什么优缺点吗?
推荐的方法是始终在组件中使用挂钩,useQuery
或 useInfiniteQuery
。默认情况下,当使用查询的组件安装时,陈旧的查询将在后台重新获取 - 如果数据存在,您将立即获得数据。
如果您不希望后台重新获取,最好的方法是为您的查询设置 staleTime
。您也可以关闭 refetchOnMount
,但首选设置 staleTime
,因为它将处理各种背景重新获取(例如 onWindowFocus)。更多信息:https://tkdodo.eu/blog/react-query-as-a-state-manager
所以我对 QueryClientProvider
和 useInfiniteQuery
的优选用法感到困惑。我同时在某些渲染组件上使用 useInfiniteQuery
函数作为全局状态。然后我遇到了一个问题,其中有一个尚未渲染的组件使用相同的 useInfiniteQuery
获取相同的数据。当组件被触发渲染时,它会导致 useInfiniteQuery
再次获取。我通过将 enabled
的 queryOptions
设置为 false
解决了这个问题,因此 useInfiniteQuery
不会自动获取。
Sandbox Code(注意:您可能希望将网络设置为慢速 3G,并尝试使用 enabled: false
查询选项)。
这是使用 React Query 的首选方式还是我只使用 QueryClientProvider
更好?这两种选择有什么优缺点吗?
推荐的方法是始终在组件中使用挂钩,useQuery
或 useInfiniteQuery
。默认情况下,当使用查询的组件安装时,陈旧的查询将在后台重新获取 - 如果数据存在,您将立即获得数据。
如果您不希望后台重新获取,最好的方法是为您的查询设置 staleTime
。您也可以关闭 refetchOnMount
,但首选设置 staleTime
,因为它将处理各种背景重新获取(例如 onWindowFocus)。更多信息:https://tkdodo.eu/blog/react-query-as-a-state-manager