React Query:更改查询参数时如何处理条件重新渲染
ReactQuery: how to deal with conditional re-rendering when changing parameters of a query
我想在组件中实现无限滚动,但我的后端没有“当前”端点,这意味着 infiniteQuery 的实际版本已出的问题(据我了解)。
在我的组件中,我使用有状态变量作为 queryKey 参数创建了一个查询:
useQuery([`posts_paginated`, { page }] {
// request to http://.../posts?_sort=createdAt&_order=desc&_page=${page}&_limit=10
}
我的问题是,修改查询键会创建一个新的查询实例,触发响应对象中的 isLoading 布尔值,并且组件的呈现值取决于:
return (IsLoading) ? <LoadingComponent /> : <ViewComponent />
这意味着当设置页面变量时,ViewComponent 被卸载,结果我丢失了滚动条的当前位置。
我尝试使查询无效,这样只有 isFetching 会触发,但我认为由于查询的回调闭包已经设置,因此无法以这种方式更改参数值(我无法将其更改为运行 除了初始值之外的任何值。
我可以使用 isLoading 有条件地停止渲染,或者我可以在某种状态下开始明确地管理我的滚动条位置,但是 我想知道是否有一种明显的方法可以仅使用 React 来实现我所需要的-查询.
这样的分页可以通过设置 keepPreviousData
属性来实现。它会在键更改时将前一个查询键的数据 return 编辑为 data
,以及 isPreviousData
布尔标志,以便您可以禁用下一个按钮或显示背景加载指示器取决于它。查询将始终保持 success
状态,数据到达时将直接转换为新数据。
中也有描述
此外,我认为您 可以 得到一个“真正的”无限查询,即使后端是分页的。 getNextPageParam
只需要从函数中提取 某些东西 return,然后可以将其“注入”到 queryFn 中。如果您只想 return 缓存中当前页面的 count
并每次将其递增一个 - 我认为这没有什么不好的:)
我想在组件中实现无限滚动,但我的后端没有“当前”端点,这意味着 infiniteQuery 的实际版本已出的问题(据我了解)。
在我的组件中,我使用有状态变量作为 queryKey 参数创建了一个查询:
useQuery([`posts_paginated`, { page }] {
// request to http://.../posts?_sort=createdAt&_order=desc&_page=${page}&_limit=10
}
我的问题是,修改查询键会创建一个新的查询实例,触发响应对象中的 isLoading 布尔值,并且组件的呈现值取决于:
return (IsLoading) ? <LoadingComponent /> : <ViewComponent />
这意味着当设置页面变量时,ViewComponent 被卸载,结果我丢失了滚动条的当前位置。
我尝试使查询无效,这样只有 isFetching 会触发,但我认为由于查询的回调闭包已经设置,因此无法以这种方式更改参数值(我无法将其更改为运行 除了初始值之外的任何值。
我可以使用 isLoading 有条件地停止渲染,或者我可以在某种状态下开始明确地管理我的滚动条位置,但是 我想知道是否有一种明显的方法可以仅使用 React 来实现我所需要的-查询.
这样的分页可以通过设置 keepPreviousData
属性来实现。它会在键更改时将前一个查询键的数据 return 编辑为 data
,以及 isPreviousData
布尔标志,以便您可以禁用下一个按钮或显示背景加载指示器取决于它。查询将始终保持 success
状态,数据到达时将直接转换为新数据。
此外,我认为您 可以 得到一个“真正的”无限查询,即使后端是分页的。 getNextPageParam
只需要从函数中提取 某些东西 return,然后可以将其“注入”到 queryFn 中。如果您只想 return 缓存中当前页面的 count
并每次将其递增一个 - 我认为这没有什么不好的:)