From 6f1f0a46d9addb075d6cd67706556bbbb89ec4f2 Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Sat, 15 Oct 2022 19:49:11 +0200 Subject: [PATCH] fix `skipToken` behaviour in `useQueryState` --- packages/toolkit/src/query/core/buildSlice.ts | 13 +++++++++---- packages/toolkit/src/query/react/buildHooks.ts | 4 +++- .../toolkit/src/query/tests/buildHooks.test.tsx | 12 ++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/toolkit/src/query/core/buildSlice.ts b/packages/toolkit/src/query/core/buildSlice.ts index 2b91606132..d4cb0f5da9 100644 --- a/packages/toolkit/src/query/core/buildSlice.ts +++ b/packages/toolkit/src/query/core/buildSlice.ts @@ -428,15 +428,19 @@ export function buildSlice({ draft[queryCacheKey]![requestId] = options } return true - } else if (unsubscribeQueryResult.match(action)) { + } + if (unsubscribeQueryResult.match(action)) { const { queryCacheKey, requestId } = action.payload if (draft[queryCacheKey]) { delete draft[queryCacheKey]![requestId] } return true - } else if (querySlice.actions.removeQueryResult.match(action)) { + } + if (querySlice.actions.removeQueryResult.match(action)) { delete draft[action.payload.queryCacheKey] - } else if (queryThunk.pending.match(action)) { + return true + } + if (queryThunk.pending.match(action)) { const { meta: { arg, requestId }, } = action @@ -447,7 +451,8 @@ export function buildSlice({ return true } - } else if (queryThunk.rejected.match(action)) { + } + if (queryThunk.rejected.match(action)) { const { meta: { condition, arg, requestId }, } = action diff --git a/packages/toolkit/src/query/react/buildHooks.ts b/packages/toolkit/src/query/react/buildHooks.ts index a6ee6b5811..d89d5f21bc 100644 --- a/packages/toolkit/src/query/react/buildHooks.ts +++ b/packages/toolkit/src/query/react/buildHooks.ts @@ -625,7 +625,9 @@ export function buildHooks({ ) lastResult = undefined } - + if (queryArgs === skipToken) { + lastResult = undefined + } // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args let data = currentState.isSuccess ? currentState.data : lastResult?.data if (data === undefined) data = currentState.data diff --git a/packages/toolkit/src/query/tests/buildHooks.test.tsx b/packages/toolkit/src/query/tests/buildHooks.test.tsx index 187895b12c..a8122eb891 100644 --- a/packages/toolkit/src/query/tests/buildHooks.test.tsx +++ b/packages/toolkit/src/query/tests/buildHooks.test.tsx @@ -2379,11 +2379,7 @@ describe('skip behaviour', () => { await act(async () => { rerender([1, { skip: true }]) }) - expect(result.current).toEqual({ - ...uninitialized, - currentData: undefined, - data: { name: 'Timmy' }, - }) + expect(result.current).toEqual(uninitialized) await delay(1) expect(subscriptionCount('getUser(1)')).toBe(0) }) @@ -2415,11 +2411,7 @@ describe('skip behaviour', () => { await act(async () => { rerender([skipToken]) }) - expect(result.current).toEqual({ - ...uninitialized, - currentData: undefined, - data: { name: 'Timmy' }, - }) + expect(result.current).toEqual(uninitialized) await delay(1) expect(subscriptionCount('getUser(1)')).toBe(0) })