From 194f65de1f4bb67c1ca15ae1b217643da085c96a Mon Sep 17 00:00:00 2001 From: Reza Rahemtola Date: Thu, 6 Aug 2026 19:38:07 +0200 Subject: [PATCH] fix(react-query): remove placeholderData from suspense infinite query --- ...seSuspenseInfiniteQuery-placeholderData.md | 6 +++ .../src/useSuspenseInfiniteQuery.ts | 1 + .../useSuspenseInfiniteQuery.test.tsx | 51 +++++++++++++++++++ .../src/useSuspenseInfiniteQuery.ts | 1 + 4 files changed, 59 insertions(+) create mode 100644 .changeset/useSuspenseInfiniteQuery-placeholderData.md diff --git a/.changeset/useSuspenseInfiniteQuery-placeholderData.md b/.changeset/useSuspenseInfiniteQuery-placeholderData.md new file mode 100644 index 00000000000..21faf8afa7e --- /dev/null +++ b/.changeset/useSuspenseInfiniteQuery-placeholderData.md @@ -0,0 +1,6 @@ +--- +'@tanstack/react-query': patch +'@tanstack/preact-query': patch +--- + +fix: remove placeholderData from suspense infinite query diff --git a/packages/preact-query/src/useSuspenseInfiniteQuery.ts b/packages/preact-query/src/useSuspenseInfiniteQuery.ts index 54e52f752dc..90a1c06d356 100644 --- a/packages/preact-query/src/useSuspenseInfiniteQuery.ts +++ b/packages/preact-query/src/useSuspenseInfiniteQuery.ts @@ -43,6 +43,7 @@ export function useSuspenseInfiniteQuery< enabled: true, suspense: true, throwOnError: defaultThrowOnError, + placeholderData: undefined, }, InfiniteQueryObserver as typeof QueryObserver, queryClient, diff --git a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx index 2eed17dfe05..f2116377fc4 100644 --- a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx +++ b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test.tsx @@ -182,4 +182,55 @@ describe('useSuspenseInfiniteQuery', () => { consoleErrorSpy.mockRestore() process.env.NODE_ENV = envCopy }) + + it('should still suspense if queryClient has placeholderData config', async () => { + const key = queryKey() + const queryClientWithPlaceholder = new QueryClient({ + defaultOptions: { + queries: { + placeholderData: (previousData: any) => previousData, + }, + }, + }) + const states: Array>> = + [] + + let count = 0 + + function Page() { + const [stateKey, setStateKey] = React.useState(key) + + const state = useSuspenseInfiniteQuery({ + queryKey: stateKey, + queryFn: () => sleep(10).then(() => ++count), + initialPageParam: 1, + getNextPageParam: () => undefined, + }) + + states.push(state) + + return ( +
+
+ ) + } + + const rendered = renderWithClient( + queryClientWithPlaceholder, + + + , + ) + + expect(rendered.getByText('loading')).toBeInTheDocument() + await act(() => vi.advanceTimersByTimeAsync(10)) + expect(rendered.getByText('data: 1')).toBeInTheDocument() + + fireEvent.click(rendered.getByLabelText('toggle')) + expect(rendered.getByText('loading')).toBeInTheDocument() + await act(() => vi.advanceTimersByTimeAsync(10)) + expect(rendered.getByText('data: 2')).toBeInTheDocument() + }) }) diff --git a/packages/react-query/src/useSuspenseInfiniteQuery.ts b/packages/react-query/src/useSuspenseInfiniteQuery.ts index 3c2fdfdd72f..20b7fc71117 100644 --- a/packages/react-query/src/useSuspenseInfiniteQuery.ts +++ b/packages/react-query/src/useSuspenseInfiniteQuery.ts @@ -43,6 +43,7 @@ export function useSuspenseInfiniteQuery< enabled: true, suspense: true, throwOnError: defaultThrowOnError, + placeholderData: undefined, }, InfiniteQueryObserver as typeof QueryObserver, queryClient,