From 7624785d314030e9d5bdc939aec101b54b8bfe45 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Thu, 12 Sep 2024 20:03:59 +0200 Subject: [PATCH] fix(core): make sure infiniteQuery always fetches the first page (#8051) The pageParam == null bailout is meant for fetching further pages, where users can return null/undefined from getNextPageParam to stop fetching; However, after the latest refactoring, we also did this for the initial fetch. This stops fetching from working at all if the initialPageParam was set to null/undefined, which I didn't think anyone would do, but here we are. --- .../__tests__/infiniteQueryBehavior.test.tsx | 28 +++++++++++++++++++ .../query-core/src/infiniteQueryBehavior.ts | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 1ca35fdfcf..dffdd3e12c 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -396,4 +396,32 @@ describe('InfiniteQueryBehavior', () => { expect(reFetchedData.data?.pageParams).toEqual([1, 2, 3]) }) + + test('should fetch even if initialPageParam is null', async () => { + const key = queryKey() + + const observer = new InfiniteQueryObserver(queryClient, { + queryKey: key, + queryFn: async () => 'data', + getNextPageParam: () => null, + initialPageParam: null, + }) + + let observerResult: + | InfiniteQueryObserverResult + | undefined + + const unsubscribe = observer.subscribe((result) => { + observerResult = result + }) + + await waitFor(() => + expect(observerResult).toMatchObject({ + isFetching: false, + data: { pages: ['data'], pageParams: [null] }, + }), + ) + + unsubscribe() + }) }) diff --git a/packages/query-core/src/infiniteQueryBehavior.ts b/packages/query-core/src/infiniteQueryBehavior.ts index 04de4f7a30..9dc28f230e 100644 --- a/packages/query-core/src/infiniteQueryBehavior.ts +++ b/packages/query-core/src/infiniteQueryBehavior.ts @@ -99,7 +99,7 @@ export function infiniteQueryBehavior( currentPage === 0 ? (oldPageParams[0] ?? options.initialPageParam) : getNextPageParam(options, result) - if (param == null) { + if (currentPage > 0 && param == null) { break } result = await fetchPage(result, param)