Skip to content

Commit d409854

Browse files
authoredOct 13, 2024··
fix(react-query): do not overwrite staleTime with the suspense default value if it's a function (#8174)
* fix(react-query): do not overwrite staleTime with the suspense default value if it's a function * test: improve * chore: fix test
1 parent 2649e52 commit d409854

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed
 

‎packages/react-query/src/__tests__/suspense.test.tsx

+40
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,46 @@ describe('useSuspenseQuery', () => {
382382
await waitFor(() => rendered.getByText('fetching: false'))
383383
})
384384

385+
it('should set staleTime when having passed a function', async () => {
386+
const key = queryKey()
387+
let count = 0
388+
389+
function Component() {
390+
const result = useSuspenseQuery({
391+
queryKey: key,
392+
queryFn: async () => {
393+
await sleep(5)
394+
count++
395+
return count
396+
},
397+
staleTime: () => 60 * 1000,
398+
})
399+
return (
400+
<div>
401+
<span>data: {result.data}</span>
402+
</div>
403+
)
404+
}
405+
406+
function Page() {
407+
return (
408+
<React.Suspense fallback="Loading...">
409+
<Component />
410+
</React.Suspense>
411+
)
412+
}
413+
414+
const rendered = renderWithClient(queryClient, <Page />)
415+
416+
await waitFor(() => rendered.getByText('Loading...'))
417+
await waitFor(() => rendered.getByText('data: 1'))
418+
419+
expect(
420+
typeof queryClient.getQueryCache().find({ queryKey: key })?.observers[0]
421+
?.options.staleTime,
422+
).toBe('function')
423+
})
424+
385425
it('should suspend when switching to a new query', async () => {
386426
const key1 = queryKey()
387427
const key2 = queryKey()

‎packages/react-query/src/suspense.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const ensureSuspenseTimers = (
2424
if (defaultedOptions.suspense) {
2525
// Always set stale time when using suspense to prevent
2626
// fetching again when directly mounting after suspending
27-
if (typeof defaultedOptions.staleTime !== 'number') {
27+
if (defaultedOptions.staleTime === undefined) {
2828
defaultedOptions.staleTime = 1000
2929
}
3030
if (typeof defaultedOptions.gcTime === 'number') {

0 commit comments

Comments
 (0)
Please sign in to comment.