分页、预取与取消
5.1 普通分页查询模式
Section titled “5.1 普通分页查询模式”适合固定页码(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为真时预取下一页。
5.2 Infinite Query 预取与取消
Section titled “5.2 Infinite Query 预取与取消”适合无限滚动/加载更多:
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。