diff --git a/src/hooks/useScrollTo.tsx b/src/hooks/useScrollTo.tsx index 592a670..d88a7ac 100644 --- a/src/hooks/useScrollTo.tsx +++ b/src/hooks/useScrollTo.tsx @@ -91,7 +91,7 @@ export default function useScrollTo( const offset = getOffset(rawOffset, { getSize, align: mergedAlign }); const height = containerRef.current.clientHeight; - let needCollectHeight = false; + let needCollectHeight = index < 0; let newTargetAlign: 'top' | 'bottom' | null = targetAlign; let targetTop: number | null = null; diff --git a/tests/scroll.test.js b/tests/scroll.test.js index 0c1ea28..57ea5d5 100644 --- a/tests/scroll.test.js +++ b/tests/scroll.test.js @@ -208,17 +208,24 @@ describe('List.Scroll', () => { expect(container.querySelector('ul').scrollTop).toEqual(520); }); - it('refreshes key index when data changes', () => { + it('retries key scroll when data changes after layout', () => { const ref = React.createRef(); function Demo() { const [data, setData] = React.useState(genData(1)); + const [update, setUpdate] = React.useState(false); + + React.useLayoutEffect(() => { + if (update) { + setData(genData(100)); + } + }, [update]); return ( <>