useInfiniteQuery
是 React Query 库中的一个钩子函数,用于处理无限滚动加载的数据。它允许你通过分页机制从服务器获取数据,并且能够自动管理缓存、状态更新和重新获取数据的逻辑。
useInfiniteQuery
自动处理分页逻辑,简化了无限滚动的实现。以下是一个使用 useInfiniteQuery
的基本示例:
import { useInfiniteQuery } from 'react-query';
import axios from 'axios';
function fetchPosts({ pageParam = 1 }) {
return axios.get(`/api/posts?page=${pageParam}`);
}
function Posts() {
const {
data,
fetchNextPage,
hasNextPage,
isFetchingNextPage,
status,
} = useInfiniteQuery(
'posts',
fetchPosts,
{
getNextPageParam: (lastPage, pages) => lastPage.nextPage,
}
);
return (
<div>
{status === 'loading' ? (
<span>Loading...</span>
) : status === 'error' ? (
<span>Error fetching posts</span>
) : (
<>
{data?.pages.map((page, i) => (
<React.Fragment key={i}>
{page.results.map((post) => (
<div key={post.id}>{post.title}</div>
))}
</React.Fragment>
))}
<button
onClick={() => fetchNextPage()}
disabled={!hasNextPage || isFetchingNextPage}
>
{isFetchingNextPage ? 'Loading more...' : 'Load More'}
</button>
</>
)}
</div>
);
}
原因:
useInfiniteQuery
。解决方法:
queryClient.invalidateQueries
手动清除缓存并触发重新获取数据。import { useQueryClient } from 'react-query';
function refreshQuery() {
const queryClient = useQueryClient();
queryClient.invalidateQueries('posts');
}
通过上述方法,可以确保在使用不同参数进行 useInfiniteQuery
新查询时,能够正确触发并获取最新的数据。
领取专属 10元无门槛券
手把手带您无忧上云