From 5443bb4577e2c95959f5865106afdf455cf69bb5 Mon Sep 17 00:00:00 2001 From: Denis Ryabko Date: Wed, 24 Jun 2026 08:17:01 +0300 Subject: [PATCH] fix(useQueryData): revert ability to manual refetching with `enabled: false` --- .../__tests__/useQueryData.refetch.test.ts | 21 +++++++++++++------ src/react-query/impl/infinite/hooks.ts | 4 ++-- src/react-query/impl/plain/hooks.ts | 4 ++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/react-query/hooks/__tests__/useQueryData.refetch.test.ts b/src/react-query/hooks/__tests__/useQueryData.refetch.test.ts index cde00b3..7ffe226 100644 --- a/src/react-query/hooks/__tests__/useQueryData.refetch.test.ts +++ b/src/react-query/hooks/__tests__/useQueryData.refetch.test.ts @@ -117,16 +117,19 @@ describe('useQueryData refetch behavior', () => { expect(originalRefetch).toHaveBeenCalledTimes(1); }); - it('should use warnDisabledRefetch when enabled: false', () => { - const originalRefetch = jest.fn(); + it('should wrap refetch when enabled: false', async () => { + const originalRefetch = jest.fn().mockResolvedValue({data: 'test', status: 'success'}); mockUseQuery.mockReturnValue(createMockQueryResult(originalRefetch) as any); const {result} = renderHook(() => useQueryData(plainDataSource, {id: 1}, {enabled: false}), ); - expect(result.current.refetch).toBe(mockWarnDisabledRefetch); expect(result.current.refetch).not.toBe(originalRefetch); + expect(result.current.refetch).not.toBe(mockWarnDisabledRefetch); + + await result.current.refetch(); + expect(originalRefetch).toHaveBeenCalledTimes(1); }); it('should use warnDisabledRefetch when params is idle', () => { @@ -164,16 +167,22 @@ describe('useQueryData refetch behavior', () => { expect(originalRefetch).toHaveBeenCalledTimes(1); }); - it('should use warnDisabledRefetch when enabled: false', () => { - const originalRefetch = jest.fn(); + it('should wrap refetch when enabled: false', async () => { + const originalRefetch = jest.fn().mockResolvedValue({ + data: {pages: [], pageParams: []}, + status: 'success', + }); mockUseInfiniteQuery.mockReturnValue(createMockInfiniteResult(originalRefetch) as any); const {result} = renderHook(() => useQueryData(infiniteDataSource, {id: 1}, {enabled: false}), ); - expect(result.current.refetch).toBe(mockWarnDisabledRefetch); expect(result.current.refetch).not.toBe(originalRefetch); + expect(result.current.refetch).not.toBe(mockWarnDisabledRefetch); + + await result.current.refetch(); + expect(originalRefetch).toHaveBeenCalledTimes(1); }); it('should use warnDisabledRefetch when params is idle', () => { diff --git a/src/react-query/impl/infinite/hooks.ts b/src/react-query/impl/infinite/hooks.ts index 2a0e8c1..71dd6a7 100644 --- a/src/react-query/impl/infinite/hooks.ts +++ b/src/react-query/impl/infinite/hooks.ts @@ -65,7 +65,7 @@ export const useInfiniteQueryData = ; }; diff --git a/src/react-query/impl/plain/hooks.ts b/src/react-query/impl/plain/hooks.ts index ba4de78..f32484a 100644 --- a/src/react-query/impl/plain/hooks.ts +++ b/src/react-query/impl/plain/hooks.ts @@ -54,12 +54,12 @@ export const usePlainQueryData = ( const composedOptions = usePlainQueryDataOptions(extendedOptions); const state = useQuery(composedOptions); - const isDisabled = composedOptions.enabled === false || composedOptions.queryFn === skipToken; + const isDisabledRefetch = composedOptions.queryFn === skipToken; return { ...state, status: normalizeStatus(state.status, state.fetchStatus), originalStatus: state.status, - refetch: isDisabled ? warnDisabledRefetch : wrapRefetch(state.refetch), + refetch: isDisabledRefetch ? warnDisabledRefetch : wrapRefetch(state.refetch), } as DataSourceState; };