diff --git a/packages/react-query/src/__tests__/useQueries.test.tsx b/packages/react-query/src/__tests__/useQueries.test.tsx
index a8d3787ea4..068b22494c 100644
--- a/packages/react-query/src/__tests__/useQueries.test.tsx
+++ b/packages/react-query/src/__tests__/useQueries.test.tsx
@@ -12,6 +12,7 @@ import * as React from 'react'
import { ErrorBoundary } from 'react-error-boundary'
import { queryKey, sleep } from '@tanstack/query-test-utils'
import {
+ IsRestoringProvider,
QueryCache,
QueryClient,
queryOptions,
@@ -1863,4 +1864,127 @@ describe('useQueries', () => {
expect(result.length).toBe(result.n)
})
})
+
+ it('should not fetch for the duration of the restoring period when isRestoring is true', async () => {
+ const key1 = queryKey()
+ const key2 = queryKey()
+ const queryFn1 = vi.fn(() => sleep(10).then(() => 'data1'))
+ const queryFn2 = vi.fn(() => sleep(10).then(() => 'data2'))
+
+ function Page() {
+ const results = useQueries({
+ queries: [
+ { queryKey: key1, queryFn: queryFn1 },
+ { queryKey: key2, queryFn: queryFn2 },
+ ],
+ })
+
+ return (
+
+
{results[0]?.status}
+
{results[1]?.status}
+
{results[0]?.fetchStatus}
+
{results[1]?.fetchStatus}
+
{results[0]?.data ?? 'undefined'}
+
{results[1]?.data ?? 'undefined'}
+
+ )
+ }
+
+ const rendered = renderWithClient(
+ queryClient,
+
+
+ ,
+ )
+
+ await vi.advanceTimersByTimeAsync(0)
+
+ expect(rendered.getByTestId('status1')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('status2')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('fetchStatus1')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('fetchStatus2')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('data1')).toHaveTextContent('undefined')
+ expect(rendered.getByTestId('data2')).toHaveTextContent('undefined')
+ expect(queryFn1).toHaveBeenCalledTimes(0)
+ expect(queryFn2).toHaveBeenCalledTimes(0)
+
+ await vi.advanceTimersByTimeAsync(11)
+
+ expect(rendered.getByTestId('status1')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('status2')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('fetchStatus1')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('fetchStatus2')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('data1')).toHaveTextContent('undefined')
+ expect(rendered.getByTestId('data2')).toHaveTextContent('undefined')
+ expect(queryFn1).toHaveBeenCalledTimes(0)
+ expect(queryFn2).toHaveBeenCalledTimes(0)
+ })
+
+ it('should not fetch queries with different durations for the duration of the restoring period when isRestoring is true', async () => {
+ const key1 = queryKey()
+ const key2 = queryKey()
+ const queryFn1 = vi.fn(() => sleep(10).then(() => 'data1'))
+ const queryFn2 = vi.fn(() => sleep(20).then(() => 'data2'))
+
+ function Page() {
+ const results = useQueries({
+ queries: [
+ { queryKey: key1, queryFn: queryFn1 },
+ { queryKey: key2, queryFn: queryFn2 },
+ ],
+ })
+
+ return (
+
+
{results[0]?.status}
+
{results[1]?.status}
+
{results[0]?.fetchStatus}
+
{results[1]?.fetchStatus}
+
{results[0]?.data ?? 'undefined'}
+
{results[1]?.data ?? 'undefined'}
+
+ )
+ }
+
+ const rendered = renderWithClient(
+ queryClient,
+
+
+ ,
+ )
+
+ await vi.advanceTimersByTimeAsync(0)
+
+ expect(rendered.getByTestId('status1')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('status2')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('fetchStatus1')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('fetchStatus2')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('data1')).toHaveTextContent('undefined')
+ expect(rendered.getByTestId('data2')).toHaveTextContent('undefined')
+ expect(queryFn1).toHaveBeenCalledTimes(0)
+ expect(queryFn2).toHaveBeenCalledTimes(0)
+
+ await vi.advanceTimersByTimeAsync(11)
+
+ expect(rendered.getByTestId('status1')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('status2')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('fetchStatus1')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('fetchStatus2')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('data1')).toHaveTextContent('undefined')
+ expect(rendered.getByTestId('data2')).toHaveTextContent('undefined')
+ expect(queryFn1).toHaveBeenCalledTimes(0)
+ expect(queryFn2).toHaveBeenCalledTimes(0)
+
+ await vi.advanceTimersByTimeAsync(10)
+
+ expect(rendered.getByTestId('status1')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('status2')).toHaveTextContent('pending')
+ expect(rendered.getByTestId('fetchStatus1')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('fetchStatus2')).toHaveTextContent('idle')
+ expect(rendered.getByTestId('data1')).toHaveTextContent('undefined')
+ expect(rendered.getByTestId('data2')).toHaveTextContent('undefined')
+ expect(queryFn1).toHaveBeenCalledTimes(0)
+ expect(queryFn2).toHaveBeenCalledTimes(0)
+ })
})