From b20f8caf3d3f8ebdb21dde9be94bfb0ad740d5e4 Mon Sep 17 00:00:00 2001 From: Wonhee Lee <2wheeh@gmail.com> Date: Tue, 21 Oct 2025 17:53:30 +0900 Subject: [PATCH] fix: clear states when enabled is set to false in useAsync hook --- .../react/__tests__/hooks/useAsync.test.ts | 28 +++++++++++++++++++ packages/react/src/hooks/useAsync.ts | 9 +++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/react/__tests__/hooks/useAsync.test.ts b/packages/react/__tests__/hooks/useAsync.test.ts index e4f24e927..f47fc049e 100644 --- a/packages/react/__tests__/hooks/useAsync.test.ts +++ b/packages/react/__tests__/hooks/useAsync.test.ts @@ -127,4 +127,32 @@ describe('useAsync', () => { expect(result.current.error).toBeNull(); expect(queryFn).not.toHaveBeenCalled(); }); + + it('should clear states on enabled change to false', async () => { + const queryFn = jest.fn().mockResolvedValue('data'); + + const { result, rerender } = renderHook( + ({ enabled }) => + useAsync({ + queryKey: 'test7', + queryFn, + enabled, + }), + { + initialProps: { enabled: true }, + } + ); + + await waitFor(() => { + expect(result.current.isLoading).toBe(false); + }); + + expect(result.current.data).toBe('data'); + + rerender({ enabled: false }); + + expect(result.current.data).toBeNull(); + expect(result.current.isLoading).toBe(false); + expect(result.current.error).toBeNull(); + }); }); \ No newline at end of file diff --git a/packages/react/src/hooks/useAsync.ts b/packages/react/src/hooks/useAsync.ts index 65111b54d..3c8d63856 100644 --- a/packages/react/src/hooks/useAsync.ts +++ b/packages/react/src/hooks/useAsync.ts @@ -60,7 +60,14 @@ export function useAsync({ }, []); useEffect(() => { - if (!enabled) return; + if (!enabled) { + setState({ + data: null, + isLoading: false, + error: null, + }); + return; + } if (!disableCache && cache.has(cacheKey)) { setState(prev => ({