From ef205ed16b258ee1311d567f035f2d14cb638309 Mon Sep 17 00:00:00 2001 From: liaoliao666 <1076988944@qq.com> Date: Mon, 23 Nov 2020 16:49:14 +0800 Subject: [PATCH 1/3] Only work once when forceFetchOnMount is ture or refetchOnMount is 'always' --- src/react/useBaseQuery.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/react/useBaseQuery.ts b/src/react/useBaseQuery.ts index fe217ca8f4..10b0fca1a9 100644 --- a/src/react/useBaseQuery.ts +++ b/src/react/useBaseQuery.ts @@ -67,8 +67,7 @@ export function useBaseQuery( !result.isSuccess ) { errorResetBoundary.clearReset() - const unsubscribe = observer.subscribe() - throw observer.fetch().finally(unsubscribe) + throw observer.fetch().finally(observer.unsubscribe) } } From 49d9183b65619d1dc7bbb742c87614be9195e063 Mon Sep 17 00:00:00 2001 From: liaoliao666 <1076988944@qq.com> Date: Wed, 25 Nov 2020 11:47:51 +0800 Subject: [PATCH 2/3] fixed(queryObserver): fetch data twice when mounted --- src/react/useBaseQuery.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/react/useBaseQuery.ts b/src/react/useBaseQuery.ts index 10b0fca1a9..94ca1f29a2 100644 --- a/src/react/useBaseQuery.ts +++ b/src/react/useBaseQuery.ts @@ -64,10 +64,12 @@ export function useBaseQuery( if ( resolvedConfig.enabled && resolvedConfig.suspense && - !result.isSuccess + !result.isSuccess && + !result.isFetching ) { errorResetBoundary.clearReset() - throw observer.fetch().finally(observer.unsubscribe) + const unsubscribe = observer.subscribe() + throw observer.fetch().finally(unsubscribe) } } From 5c9a72610ad18a223f193ee11414639cfc9d4a06 Mon Sep 17 00:00:00 2001 From: liaoliao666 <1076988944@qq.com> Date: Thu, 26 Nov 2020 11:10:11 +0800 Subject: [PATCH 3/3] optimization(query): reduce unnecessary recursion --- src/core/query.ts | 8 +++----- src/react/useBaseQuery.ts | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/core/query.ts b/src/core/query.ts index adf8a2bc2d..03d8fb37f8 100644 --- a/src/core/query.ts +++ b/src/core/query.ts @@ -197,14 +197,12 @@ export class Query { // Get the new data let data: TResult | undefined = functionalUpdate(updater, prevData) - // Structurally share data between prev and new data if needed - if (this.config.structuralSharing) { - data = replaceEqualDeep(prevData, data) - } - // Use prev data if an isDataEqual function is defined and returns `true` if (this.config.isDataEqual?.(prevData, data)) { data = prevData + } else if (this.config.structuralSharing) { + // Structurally share data between prev and new data if needed + data = replaceEqualDeep(prevData, data) } // Try to determine if more data can be fetched diff --git a/src/react/useBaseQuery.ts b/src/react/useBaseQuery.ts index 94ca1f29a2..fe217ca8f4 100644 --- a/src/react/useBaseQuery.ts +++ b/src/react/useBaseQuery.ts @@ -64,8 +64,7 @@ export function useBaseQuery( if ( resolvedConfig.enabled && resolvedConfig.suspense && - !result.isSuccess && - !result.isFetching + !result.isSuccess ) { errorResetBoundary.clearReset() const unsubscribe = observer.subscribe()