Skip to content

Commit c8b3ff2

Browse files
authored
fix: do not throw errors while a query is retrying (#2147)
1 parent 3b2c408 commit c8b3ff2

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

src/react/tests/QueryResetErrorBoundary.test.tsx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,66 @@ describe('QueryErrorResetBoundary', () => {
131131
consoleMock.mockRestore()
132132
})
133133

134+
it('should retry fetch if the reset error boundary has been reset and the query contains data from a previous fetch', async () => {
135+
const key = queryKey()
136+
137+
let succeed = false
138+
const consoleMock = mockConsoleError()
139+
140+
function Page() {
141+
const { data } = useQuery(
142+
key,
143+
async () => {
144+
await sleep(10)
145+
if (!succeed) {
146+
throw new Error('Error')
147+
} else {
148+
return 'data'
149+
}
150+
},
151+
{
152+
retry: false,
153+
useErrorBoundary: true,
154+
initialData: 'initial',
155+
}
156+
)
157+
return <div>{data}</div>
158+
}
159+
160+
const rendered = renderWithClient(
161+
queryClient,
162+
<QueryErrorResetBoundary>
163+
{({ reset }) => (
164+
<ErrorBoundary
165+
onReset={reset}
166+
fallbackRender={({ resetErrorBoundary }) => (
167+
<div>
168+
<div>error boundary</div>
169+
<button
170+
onClick={() => {
171+
resetErrorBoundary()
172+
}}
173+
>
174+
retry
175+
</button>
176+
</div>
177+
)}
178+
>
179+
<Page />
180+
</ErrorBoundary>
181+
)}
182+
</QueryErrorResetBoundary>
183+
)
184+
185+
await waitFor(() => rendered.getByText('error boundary'))
186+
await waitFor(() => rendered.getByText('retry'))
187+
succeed = true
188+
fireEvent.click(rendered.getByText('retry'))
189+
await waitFor(() => rendered.getByText('data'))
190+
191+
consoleMock.mockRestore()
192+
})
193+
134194
it('should not retry fetch if the reset error boundary has not been reset after a previous reset', async () => {
135195
const key = queryKey()
136196

src/react/useBaseQuery.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ export function useBaseQuery<
130130
// Handle error boundary
131131
if (
132132
(defaultedOptions.suspense || defaultedOptions.useErrorBoundary) &&
133-
result.isError
133+
result.isError &&
134+
!result.isFetching
134135
) {
135136
throw result.error
136137
}

0 commit comments

Comments
 (0)