Skip to content

Commit 6e7de8f

Browse files
committed
fix: keep previous query status when fetching
1 parent 6e8ed8d commit 6e7de8f

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

src/core/query.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ export class Query<TData = unknown, TError = unknown, TQueryFnData = TData> {
479479
fetchMeta: action.meta,
480480
isFetching: true,
481481
isPaused: false,
482-
status: state.updatedAt ? 'success' : 'loading',
482+
status: state.status === 'idle' ? 'loading' : state.status,
483483
}
484484
case 'success':
485485
return {
@@ -503,11 +503,7 @@ export class Query<TData = unknown, TError = unknown, TQueryFnData = TData> {
503503
failureCount: 0,
504504
isFetching: false,
505505
isPaused: false,
506-
status: state.error
507-
? 'error'
508-
: state.updatedAt
509-
? 'success'
510-
: 'idle',
506+
status: state.status === 'loading' ? 'idle' : state.status,
511507
}
512508
}
513509

src/core/tests/queryCache.test.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,6 +1356,35 @@ describe('queryCache', () => {
13561356

13571357
consoleMock.mockRestore()
13581358
})
1359+
1360+
test('the previous query status should be kept when refetching', async () => {
1361+
const consoleMock = mockConsoleError()
1362+
const key = queryKey()
1363+
1364+
await queryClient.prefetchQuery(key, () => 'data')
1365+
const query = queryCache.find(key)!
1366+
expect(query.state.status).toBe('success')
1367+
1368+
await queryClient.prefetchQuery(key, () => Promise.reject('reject'), {
1369+
retry: false,
1370+
})
1371+
expect(query.state.status).toBe('error')
1372+
1373+
queryClient.prefetchQuery(
1374+
key,
1375+
async () => {
1376+
await sleep(10)
1377+
return Promise.reject('reject')
1378+
},
1379+
{ retry: false }
1380+
)
1381+
expect(query.state.status).toBe('error')
1382+
1383+
await sleep(100)
1384+
expect(query.state.status).toBe('error')
1385+
1386+
consoleMock.mockRestore()
1387+
})
13591388
})
13601389

13611390
describe('QueryObserver', () => {

src/react/useBaseQuery.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ export function useBaseQuery<TData, TError, TQueryFnData, TQueryData>(
4747

4848
// Handle suspense
4949
if (observer.options.suspense || observer.options.useErrorBoundary) {
50-
if (currentResult.isError && !errorResetBoundary.isReset()) {
50+
if (
51+
currentResult.isError &&
52+
!errorResetBoundary.isReset() &&
53+
!observer.getCurrentQuery().isFetching()
54+
) {
5155
throw currentResult.error
5256
}
5357

0 commit comments

Comments
 (0)