diff --git a/src/react/tests/QueryResetErrorBoundary.test.tsx b/src/react/tests/QueryResetErrorBoundary.test.tsx index 50cf97a914..1ee596669e 100644 --- a/src/react/tests/QueryResetErrorBoundary.test.tsx +++ b/src/react/tests/QueryResetErrorBoundary.test.tsx @@ -73,6 +73,137 @@ describe('QueryErrorResetBoundary', () => { consoleMock.mockRestore() }) + it('should not throw error if query is disabled', async () => { + const key = queryKey() + + let succeed = false + const consoleMock = mockConsoleError() + + function Page() { + const { data, status } = useQuery( + key, + async () => { + await sleep(10) + if (!succeed) { + throw new Error('Error') + } else { + return 'data' + } + }, + { + retry: false, + enabled: !succeed, + useErrorBoundary: true, + } + ) + return ( +
+
status: {status}
+
{data}
+
+ ) + } + + const rendered = renderWithClient( + queryClient, + + {({ reset }) => ( + ( +
+
error boundary
+ +
+ )} + > + +
+ )} +
+ ) + + await waitFor(() => rendered.getByText('error boundary')) + await waitFor(() => rendered.getByText('retry')) + succeed = true + fireEvent.click(rendered.getByText('retry')) + await waitFor(() => rendered.getByText('status: error')) + + consoleMock.mockRestore() + }) + + it('should not throw error if query is disabled, and refetch if query becomes enabled again', async () => { + const key = queryKey() + + let succeed = false + const consoleMock = mockConsoleError() + + function Page() { + const [enabled, setEnabled] = React.useState(false) + const { data } = useQuery( + key, + async () => { + await sleep(10) + if (!succeed) { + throw new Error('Error') + } else { + return 'data' + } + }, + { + retry: false, + enabled, + useErrorBoundary: true, + } + ) + + React.useEffect(() => { + setEnabled(true) + }, []) + + return
{data}
+ } + + const rendered = renderWithClient( + queryClient, + + {({ reset }) => ( + ( +
+
error boundary
+ +
+ )} + > + +
+ )} +
+ ) + + await waitFor(() => rendered.getByText('error boundary')) + await waitFor(() => rendered.getByText('retry')) + succeed = true + fireEvent.click(rendered.getByText('retry')) + await waitFor(() => rendered.getByText('data')) + + consoleMock.mockRestore() + }) + it('should not retry fetch if the reset error boundary has not been reset', async () => { const key = queryKey() diff --git a/src/react/useBaseQuery.ts b/src/react/useBaseQuery.ts index 0736532baa..149d80320c 100644 --- a/src/react/useBaseQuery.ts +++ b/src/react/useBaseQuery.ts @@ -131,6 +131,7 @@ export function useBaseQuery< // Handle error boundary if ( result.isError && + defaultedOptions.enabled !== false && !result.isFetching && shouldThrowError( defaultedOptions.suspense,