Skip to content

Commit 6b7ab47

Browse files
authored
fix: reloadAsync runAsync payload issue (#2836)
* fix: reloadAsync runAsync payload issue * feat: update test
1 parent d04860e commit 6b7ab47

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { act, renderHook } from '@testing-library/react';
1+
import { act, renderHook, waitFor } from '@testing-library/react';
22
import { useState } from 'react';
33
import { afterAll, beforeAll, beforeEach, describe, expect, test, vi } from 'vitest';
44
import { sleep } from '../../utils/testingHelpers';
@@ -425,4 +425,41 @@ describe('useInfiniteScroll', () => {
425425

426426
expect(result.current.error?.message).toBe('error message');
427427
});
428+
429+
test('reloadAsync should reset data and restart from page=1', async () => {
430+
const PAGE_SIZE = 2;
431+
432+
// Vitest 的 mock
433+
const getLoadMoreListMock = vi.fn((page: number, pageSize: number) => {
434+
const start = (page - 1) * pageSize + 1;
435+
const list = Array.from({ length: pageSize }, (_, i) => start + i);
436+
return Promise.resolve({ list });
437+
});
438+
439+
const { result } = renderHook(() =>
440+
useInfiniteScroll((d) => {
441+
const page = d ? Math.ceil(d.list.length / PAGE_SIZE) + 1 : 1;
442+
return getLoadMoreListMock(page, PAGE_SIZE);
443+
}),
444+
);
445+
446+
await act(async () => {
447+
await result.current.loadMoreAsync();
448+
});
449+
expect(getLoadMoreListMock).toHaveBeenLastCalledWith(1, PAGE_SIZE);
450+
expect(result.current.data?.list.length).toBe(2);
451+
452+
await act(async () => {
453+
await result.current.loadMoreAsync();
454+
});
455+
expect(getLoadMoreListMock).toHaveBeenLastCalledWith(2, PAGE_SIZE);
456+
expect(result.current.data?.list.length).toBe(4);
457+
458+
await act(async () => {
459+
await result.current.reloadAsync();
460+
});
461+
expect(getLoadMoreListMock).toHaveBeenLastCalledWith(1, PAGE_SIZE);
462+
expect(result.current.data?.list.length).toBe(2);
463+
expect(result.current.data?.list).toEqual([1, 2]);
464+
});
428465
});

packages/hooks/src/useInfiniteScroll/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ const useInfiniteScroll = <TData extends Data>(
9494
run(finalData);
9595
});
9696

97-
const runAsyncForCurrent = async () => {
98-
const res = await runAsync(finalData);
97+
const runAsyncForCurrent = async (data?: TData) => {
98+
const res = await runAsync(data);
9999
return res.currentData;
100100
};
101101

@@ -104,7 +104,7 @@ const useInfiniteScroll = <TData extends Data>(
104104
return Promise.reject();
105105
}
106106
setLoadingMore(true);
107-
return runAsyncForCurrent();
107+
return runAsyncForCurrent(finalData);
108108
});
109109

110110
const reload = () => {

0 commit comments

Comments
 (0)