javascript - React Query v3 useInfiniteQuery 返回 isLoading,isFetching 始终为 true,isFetchingNextPage 始终为 false
问题描述
我已经使用 react-query v3 中的 useInfiniteQuery 实现了无限滚动。但是isLoading,isFetching在第一页查询后始终为真。而且isFetchingNextPage总是假的。初始加载第一页后,使用fetchNextPage()发出下一页请求
这是我的useContents钩子。
const useContents = (params) => {
return useInfiniteQuery(
['contents', params.Section],
({ pageParam = 0 }) => fetchContents(pageParam, params), {
getNextPageParam: (lastPage, allPages) => {
if (lastPage.payload.size === PAGE_SIZE) return allPages.length;
return false;
},
refetchInterval: 60000,
staleTime: 60000,
}
);
};
这是fetchContents
const fetchContents = (pageParam, params) => {
return axios
.get(`${apiDomain}/contents`, {
params: {
Section: params.Section,
ViewType: params.ViewType,
Count: pageParam*PAGE_SIZE,
PageSize: PAGE_SIZE,
...params.questionSectionParam,
},
...generateAxiosOptions('GET'),
})
.then((res) => {
return {
message: res.data.message,
payload: fromJS(res.data.payload),
result: res.data.result,
status: res.status,
pageParam,
};
});
};
我花了几个小时,但找不到原因。
解决方案
事实证明这是一个愚蠢的错误。我添加了一个滚动事件侦听器来引用来自具有空数组的道具。在错误代码下方并通过删除空数组进行修复。
useEffect(() => {
!!contentListRef && contentListRef.addEventListener('scroll', infiniteScroller, false);
return () => {
lastScrollTop = 0;
contentListRef.removeEventListener('scroll', infiniteScroller, false);
};
}, []); // <-- This empty array is the reason for this bug
推荐阅读
- sql - 如何修改这个 sqlite SQL 查询以减少内部连接过滤器?
- ruby-on-rails - 未能尝试在 Rails 中的嵌套路由上使用 2 个 ID
- android - 如何在操作系统版本 7.0+ 上关闭系统对话框或通知?
- r - R 的 Huxtable 包:如何在 bookdown 中正确引用 huxtables?
- python - 通过reduce逐元素添加两个3d列表
- python - 如何在 linux 服务器上的 python 环境中使用 anaconda 包?
- awk - 用于创建唯一 ID 列表的文本处理
- python - “合并”替换 Keras/Tensorflow/Python3
- swift - '无法推断通用参数'T''
- android - PWA - 为安卓设备设置启动画面