diff --git a/.changeset/null-page-param-refetch.md b/.changeset/null-page-param-refetch.md new file mode 100644 index 0000000000..204b6a93f0 --- /dev/null +++ b/.changeset/null-page-param-refetch.md @@ -0,0 +1,5 @@ +--- +'@tanstack/query-core': patch +--- + +Preserve a stored `null` first page parameter when refetching an infinite query. diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 1a4bf1bee3..cc5522c786 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -474,6 +474,30 @@ describe('InfiniteQueryBehavior', () => { unsubscribe() }) + it('should preserve a null first page parameter when refetching', async () => { + const key = queryKey() + const pageParams: Array = [] + const queryFn = ({ pageParam }: { pageParam: unknown }) => { + pageParams.push(pageParam) + return String(pageParam) + } + + await queryClient.infiniteQuery({ + queryKey: key, + queryFn, + initialPageParam: null, + getNextPageParam: () => undefined, + }) + await queryClient.infiniteQuery({ + queryKey: key, + queryFn, + initialPageParam: 'replacement', + getNextPageParam: () => undefined, + }) + + expect(pageParams).toEqual([null, null]) + }) + it('should not fetch next page when getNextPageParam returns null', async () => { const key = queryKey() diff --git a/packages/query-core/src/infiniteQueryBehavior.ts b/packages/query-core/src/infiniteQueryBehavior.ts index 2d87db5a5a..002ab16bd7 100644 --- a/packages/query-core/src/infiniteQueryBehavior.ts +++ b/packages/query-core/src/infiniteQueryBehavior.ts @@ -97,7 +97,9 @@ export function infiniteQueryBehavior( do { const param = currentPage === 0 - ? (oldPageParams[0] ?? options.initialPageParam) + ? oldPageParams[0] === undefined + ? options.initialPageParam + : oldPageParams[0] : getNextPageParam(options, result) if (currentPage > 0 && param == null) { break