diff --git a/src/queryCache.js b/src/queryCache.js index 6f17a240771..13d74151fe8 100644 --- a/src/queryCache.js +++ b/src/queryCache.js @@ -110,7 +110,7 @@ export function makeQueryCache() { if (query) { Object.assign(query, { queryVariables, queryFn }) - Object.assign(query.config, config) + query.config = { ...query.config, ...config } } else { query = makeQuery({ queryKey, diff --git a/src/useBaseQuery.js b/src/useBaseQuery.js index 4a7be774044..4d47d78f01a 100644 --- a/src/useBaseQuery.js +++ b/src/useBaseQuery.js @@ -89,28 +89,28 @@ export function useBaseQuery(queryKey, queryVariables, queryFn, config = {}) { // Handle refetch interval React.useEffect(() => { + const query = queryRef.current if ( config.refetchInterval && - (!query.refetchInterval || config.refetchInterval < query.refetchInterval) + (!query.currentRefetchInterval || + // shorter interval should override previous one + config.refetchInterval < query.currentRefetchInterval) ) { - clearInterval(query.refetchInterval) - query.refetchInterval = setInterval(() => { + query.currentRefetchInterval = config.refetchInterval + clearInterval(query.refetchIntervalId) + query.refetchIntervalId = setInterval(() => { if (isDocumentVisible() || config.refetchIntervalInBackground) { refetch().catch(Console.error) } }, config.refetchInterval) return () => { - clearInterval(query.refetchInterval) - delete query.refetchInterval + clearInterval(query.refetchIntervalId) + delete query.refetchIntervalId + delete query.currentRefetchInterval } } - }, [ - config.refetchInterval, - config.refetchIntervalInBackground, - query.refetchInterval, - refetch, - ]) + }, [config.refetchInterval, config.refetchIntervalInBackground, refetch]) return { ...query.state,