Reactjs ReactQuery:更改查询参数时如何处理条件重新呈现

Reactjs ReactQuery:更改查询参数时如何处理条件重新呈现,reactjs,pagination,scrollbar,react-query,Reactjs,Pagination,Scrollbar,React Query,我想在组件中实现一个无限滚动,但我的后端没有“当前”端点,这意味着实际版本的infiniteQuery是不可能的(据我所知) 在我的组件中,我使用有状态变量作为queryKey参数创建了一个查询: useQuery([`posts_paginated`, { page }] { // request to http://.../posts?_sort=createdAt&_order=desc&_page=${page}&_limit=10 } 我的问题是,修

我想在组件中实现一个无限滚动,但我的后端没有“当前”端点,这意味着实际版本的infiniteQuery是不可能的(据我所知)

在我的组件中,我使用有状态变量作为queryKey参数创建了一个查询:

useQuery([`posts_paginated`, { page }] {
    // request to  http://.../posts?_sort=createdAt&_order=desc&_page=${page}&_limit=10
}
我的问题是,修改查询键会创建一个新的查询实例,触发响应对象中的isLoading boolean,组件的呈现值取决于:

return (IsLoading) ? <LoadingComponent /> : <ViewComponent />
返回(正在加载)?:
这意味着当设置页面变量时,将卸载ViewComponent,结果是丢失滚动条的当前位置

我尝试使查询无效,这样只有isFetching才会触发,但我认为,由于查询的回调闭包已经设置好,因此无法以这种方式更改参数值(除了初始值之外,我无法使其运行)


我可以通过isLoading停止连续渲染,或者我可以开始在某些状态下明确管理滚动条的位置,但是我想知道是否有一种明显的方法可以通过使用react query实现我所需要的内容

通过设置
keepPreviousData
属性可以实现这样的分页。当键更改时,它将保留上一查询键的数据作为
data
返回,并带有
isPreviousData
布尔标志,以便您可以禁用下一步按钮或根据它显示后台加载指示器。然后,查询将始终处于
success
状态,数据到达时将直接转换为新数据

这一点也在本文中进行了描述


此外,我认为即使后端分页,也可以使用“真正的”无限查询
getNextPageParam
只需要从函数返回一些东西,然后可以“注入”到queryFn中。如果您只想返回缓存中当前页面的
计数,并每次递增一个,我认为这没有什么不好:)

使用我的代码并在true上插入keepPreviousData可以立即工作。我无法使无穷大工作。我怀疑对文档使用哈希ID与游标逻辑不兼容。