diff --git a/src/List.tsx b/src/List.tsx index 8d5311af..e49f9e5d 100644 --- a/src/List.tsx +++ b/src/List.tsx @@ -239,7 +239,7 @@ export function RawList(props: ListProps, ref: React.Ref) { } // Give cache to improve scroll experience - endIndex = Math.min(endIndex + 1, mergedData.length); + endIndex = Math.min(endIndex + 1, mergedData.length - 1); return { scrollHeight: itemTop, diff --git a/tests/scroll.test.js b/tests/scroll.test.js index 1243a964..f1173920 100644 --- a/tests/scroll.test.js +++ b/tests/scroll.test.js @@ -336,4 +336,34 @@ describe('List.Scroll', () => { expect(spyPreventDefault).toHaveBeenCalled(); }); + + it('scroll to end should not has wrong extraRender', () => { + const extraRender = jest.fn(({ start, end }) => { + return null; + }); + + jest.useFakeTimers(); + const { container } = genList( + { + itemHeight: 20, + height: 100, + data: genData(100), + extraRender, + }, + render, + ); + + const holder = container.querySelector('ul'); + + const event = createEvent.wheel(holder, { + deltaY: 99999999999999999999, + }); + fireEvent(holder, event); + + act(() => { + jest.runAllTimers(); + }); + + expect(extraRender).toHaveBeenCalledWith(expect.objectContaining({ end: 99 })); + }); });