diff --git a/packages/react-query/src/__tests__/suspense.test.tsx b/packages/react-query/src/__tests__/suspense.test.tsx
index 8607b0bde2..2b55386fde 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().find({ queryKey: key })?.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') {