diff --git a/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts b/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts index 586403c04d..3ef3d60157 100644 --- a/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts +++ b/packages/hooks/src/useInfiniteScroll/__tests__/index.test.ts @@ -159,6 +159,35 @@ describe('useInfiniteScroll', () => { }); }); + it('reload data should be latest', async () => { + let listCount = 5; + const mockRequestFn = async () => { + await sleep(1000); + return { + list: Array.from({ + length: listCount, + }).map((_, index) => index + 1), + nextId: listCount, + hasMore: listCount > 2, + }; + }; + + const { result } = setup(mockRequestFn); + + await act(async () => { + jest.advanceTimersByTime(1000); + }); + expect(result.current.data).toMatchObject({ list: [1, 2, 3, 4, 5], nextId: 5 }); + + listCount = 3; + await act(async () => { + result.current.reload(); + jest.advanceTimersByTime(1000); + }); + + expect(result.current.data).toMatchObject({ list: [1, 2, 3], nextId: 3 }); + }); + it('mutate should be work', async () => { const { result } = setup(mockRequest); const { mutate } = result.current; diff --git a/packages/hooks/src/useInfiniteScroll/index.tsx b/packages/hooks/src/useInfiniteScroll/index.tsx index 0cc8d0f0bd..9d6d27e954 100644 --- a/packages/hooks/src/useInfiniteScroll/index.tsx +++ b/packages/hooks/src/useInfiniteScroll/index.tsx @@ -63,17 +63,17 @@ const useInfiniteScroll = ( }, ); - const loadMore = () => { + const loadMore = useMemoizedFn(() => { if (noMore) return; setLoadingMore(true); run(finalData); - }; + }); - const loadMoreAsync = () => { + const loadMoreAsync = useMemoizedFn(() => { if (noMore) return Promise.reject(); setLoadingMore(true); return runAsync(finalData); - }; + }); const reload = () => { setLoadingMore(false); @@ -123,8 +123,8 @@ const useInfiniteScroll = ( loadingMore, noMore, - loadMore: useMemoizedFn(loadMore), - loadMoreAsync: useMemoizedFn(loadMoreAsync), + loadMore, + loadMoreAsync, reload: useMemoizedFn(reload), reloadAsync: useMemoizedFn(reloadAsync), mutate: setFinalData,