From 7ac8265dfe4dbd7bffb94062e2ecc55608678595 Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Sun, 16 Mar 2025 11:17:13 -0300 Subject: [PATCH 1/2] Fix unmount bug --- src/hooks/useLoader.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hooks/useLoader.ts b/src/hooks/useLoader.ts index 6d4929e8..54bb2c39 100644 --- a/src/hooks/useLoader.ts +++ b/src/hooks/useLoader.ts @@ -35,6 +35,8 @@ export function useLoader({initial, ...currentOptions}: CacheOptions): R { useEffect( () => { + mountedRef.current = true; + if (initial !== undefined) { load(currentOptions); } From 0b2bc1628597a7b57668fd789b392af1520ef1f0 Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Sun, 16 Mar 2025 12:00:55 -0300 Subject: [PATCH 2/2] Fix Strict mode bug --- src/hooks/useLoader.test.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/hooks/useLoader.test.ts b/src/hooks/useLoader.test.ts index cb895544..f44a85ab 100644 --- a/src/hooks/useLoader.test.ts +++ b/src/hooks/useLoader.test.ts @@ -1,4 +1,5 @@ import {act, renderHook, waitFor} from '@testing-library/react'; +import {StrictMode} from 'react'; import {useLoader} from './useLoader'; describe('useLoader', () => { @@ -404,4 +405,34 @@ describe('useLoader', () => { await waitFor(() => expect(secondTime.current).toBe('foo')); }); + + it('should update the content in StrictMode', async () => { + jest.useFakeTimers(); + + const delay = 10; + const loader = jest.fn( + () => new Promise(resolve => { + setTimeout(() => resolve('foo'), delay); + }), + ); + + const {result} = renderHook( + () => useLoader({ + cacheKey: cacheKey.current(), + loader: loader, + initial: 'bar', + }), + { + wrapper: StrictMode, + }, + ); + + // Let the loader resolve + await act(async () => { + jest.advanceTimersByTime(delay); + await flushPromises(); + }); + + await waitFor(() => expect(result.current).toBe('foo')); + }); });