From 440bac2d5db8a7fef8821d81aa9b146ce4051637 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Sun, 13 Oct 2024 11:02:01 +0200 Subject: [PATCH 1/3] fix(react-query): do not overwrite staleTime with the suspense default value if it's a function --- .../src/__tests__/suspense.test.tsx | 40 +++++++++++++++++++ packages/react-query/src/suspense.ts | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/react-query/src/__tests__/suspense.test.tsx b/packages/react-query/src/__tests__/suspense.test.tsx index 8607b0bde2..bb44b06a6b 100644 --- a/packages/react-query/src/__tests__/suspense.test.tsx +++ b/packages/react-query/src/__tests__/suspense.test.tsx @@ -382,6 +382,46 @@ describe('useSuspenseQuery', () => { await waitFor(() => rendered.getByText('fetching: false')) }) + it('should set staleTime when having passed a function', async () => { + const key = queryKey() + let count = 0 + + function Component() { + const result = useSuspenseQuery({ + queryKey: key, + queryFn: async () => { + await sleep(5) + count++ + return count + }, + staleTime: () => 60 * 1000, + }) + return ( +
+ data: {result.data} +
+ ) + } + + function Page() { + return ( + + + + ) + } + + const rendered = renderWithClient(queryClient, ) + + await waitFor(() => rendered.getByText('Loading...')) + await waitFor(() => rendered.getByText('data: 1')) + + expect( + typeof queryClient.getQueryCache().getAll()[0]?.observers[0]?.options + .staleTime, + ).toBe('function') + }) + it('should suspend when switching to a new query', async () => { const key1 = queryKey() const key2 = queryKey() diff --git a/packages/react-query/src/suspense.ts b/packages/react-query/src/suspense.ts index 6c3d04f264..497bb83bd8 100644 --- a/packages/react-query/src/suspense.ts +++ b/packages/react-query/src/suspense.ts @@ -24,7 +24,7 @@ export const ensureSuspenseTimers = ( if (defaultedOptions.suspense) { // Always set stale time when using suspense to prevent // fetching again when directly mounting after suspending - if (typeof defaultedOptions.staleTime !== 'number') { + if (defaultedOptions.staleTime === undefined) { defaultedOptions.staleTime = 1000 } if (typeof defaultedOptions.gcTime === 'number') { From 17c0cd5184aac77d40040244272a02f0a8a505bf Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Sun, 13 Oct 2024 11:09:17 +0200 Subject: [PATCH 2/3] test: improve --- packages/react-query/src/__tests__/suspense.test.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/react-query/src/__tests__/suspense.test.tsx b/packages/react-query/src/__tests__/suspense.test.tsx index bb44b06a6b..ad299c66d4 100644 --- a/packages/react-query/src/__tests__/suspense.test.tsx +++ b/packages/react-query/src/__tests__/suspense.test.tsx @@ -416,10 +416,12 @@ describe('useSuspenseQuery', () => { await waitFor(() => rendered.getByText('Loading...')) await waitFor(() => rendered.getByText('data: 1')) - expect( - typeof queryClient.getQueryCache().getAll()[0]?.observers[0]?.options - .staleTime, - ).toBe('function') + await waitFor(() => + expect( + typeof queryClient.getQueryCache().getAll()[0]?.observers[0]?.options + .staleTime, + ).toBe('function'), + ) }) it('should suspend when switching to a new query', async () => { From 2b3b8fa4a29e51df149d07ddd4d82f72bbd1feec Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Sun, 13 Oct 2024 11:17:51 +0200 Subject: [PATCH 3/3] chore: fix test --- packages/react-query/src/__tests__/suspense.test.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/react-query/src/__tests__/suspense.test.tsx b/packages/react-query/src/__tests__/suspense.test.tsx index ad299c66d4..2b55386fde 100644 --- a/packages/react-query/src/__tests__/suspense.test.tsx +++ b/packages/react-query/src/__tests__/suspense.test.tsx @@ -416,12 +416,10 @@ describe('useSuspenseQuery', () => { await waitFor(() => rendered.getByText('Loading...')) await waitFor(() => rendered.getByText('data: 1')) - await waitFor(() => - expect( - typeof queryClient.getQueryCache().getAll()[0]?.observers[0]?.options - .staleTime, - ).toBe('function'), - ) + expect( + typeof queryClient.getQueryCache().find({ queryKey: key })?.observers[0] + ?.options.staleTime, + ).toBe('function') }) it('should suspend when switching to a new query', async () => {