跳转到内容

分页、预取与取消

适合固定页码(page=1,2,3...)场景:

const current = client.defineQuery({
key: ['users', { page, pageSize }],
queryFn: ({ signal }) => fetch(`/api/users?page=${page}&pageSize=${pageSize}`, { signal }).then((r) => r.json()),
});

建议:

  • 把分页参数放进 key。
  • 仅在 hasMore 为真时预取下一页。

适合无限滚动/加载更多:

await client.prefetchInfiniteQuery(
{
key: ['feed'],
initialPageParam: 0,
queryFn: ({ signal, pageParam }) =>
fetch(`/api/feed?cursor=${pageParam}`, { signal }).then((r) => r.json()),
getNextPageParam: (lastPage) => lastPage.nextCursor,
},
3,
);
  • 第二个参数可指定预取页数(如上示例预取 3 页)。
  • 调用 cancel() 会取消当前请求,并重置当前方向状态。
  • 页码分页defineQuery + 预取下一页。
  • 无限滚动defineInfiniteQuery / useInfiniteQuery