diff --git a/hooks/useLazyLoadData/useLazyLoadData.test.ts b/hooks/useLazyLoadData/useLazyLoadData.test.ts index df0e20d..0eb9897 100644 --- a/hooks/useLazyLoadData/useLazyLoadData.test.ts +++ b/hooks/useLazyLoadData/useLazyLoadData.test.ts @@ -202,4 +202,28 @@ describe('useLazyLoadData', () => { lazyFetchData(); expect(callback).toHaveBeenCalledTimes(2); }); + + it('should not reuse stale response once new data is requested', async () => { + const getSuccess = jest + .fn() + .mockImplementationOnce(async () => Promise.resolve('1')) + .mockImplementationOnce(async () => Promise.resolve('2')); + + const renderedHook = renderHook(() => useLazyLoadData(getSuccess)); + const lazyFetchData = renderedHook.result.current; + + const res1 = await lazyFetchData(); + expect(res1).toBe('1'); + expect(getSuccess).toHaveBeenCalledTimes(1); + + const res2 = lazyFetchData(true); + const res3 = lazyFetchData(); + const res4 = lazyFetchData(); + + const [r2, r3, r4] = await Promise.all([res2, res3, res4]); + expect(r2).toBe('2'); + expect(r3).toBe('2'); + expect(r4).toBe('2'); + expect(getSuccess).toHaveBeenCalledTimes(2); + }); }); diff --git a/hooks/useLazyLoadData/useLazyLoadData.ts b/hooks/useLazyLoadData/useLazyLoadData.ts index bf96361..4153807 100644 --- a/hooks/useLazyLoadData/useLazyLoadData.ts +++ b/hooks/useLazyLoadData/useLazyLoadData.ts @@ -123,6 +123,8 @@ export function useLazyLoadData( } if (disableCache) { + delete promiseSingleton.current[key]; + cache.current[key] = undefined; return handleFetchData(); } if (cachedData !== undefined && invokeCallback) { diff --git a/package.json b/package.json index a88b222..308084a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@optum/react-hooks", - "version": "1.1.0", + "version": "1.1.1", "description": "A reusable set of React hooks", "repository": "https://github.com/Optum/react-hooks", "license": "Apache 2.0",