Skip to content

Commit d5f09d2

Browse files
committed
fix: Scroll back to raw list should not crash after size change again
1 parent 3ccd2b5 commit d5f09d2

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

examples/switch.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,18 @@ function getData(count: number) {
3434
}
3535

3636
const Demo = () => {
37-
const [data, setData] = React.useState<{ id: number }[]>(getData(1));
37+
const [state, setState] = React.useState<number>(0);
38+
39+
const data = React.useMemo(() => {
40+
switch (state) {
41+
case 0:
42+
return getData(1000);
43+
case 1:
44+
return getData(2);
45+
default:
46+
return getData(0);
47+
}
48+
}, [state]);
3849

3950
return (
4051
<React.StrictMode>
@@ -55,7 +66,7 @@ const Demo = () => {
5566
<button
5667
type="button"
5768
onClick={() => {
58-
setData(data.length === 1 ? getData(10000) : getData(1));
69+
setState((state + 1) % 3);
5970
}}
6071
>
6172
Switch

src/List.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ class List<T = any> extends React.Component<ListProps<T>, ListState<T>> {
279279

280280
this.setState({
281281
status: 'MEASURE_DONE',
282+
itemIndex: 0,
282283
});
283284

284285
requestAnimationFrame(() => {

tests/list.test.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,15 @@ describe('List', () => {
174174
});
175175

176176
scrollHeight = 200;
177-
data = data.slice(0, -1);
177+
data = data.slice(0, 2);
178178
wrapper.setProps({ data });
179179
expect(wrapper.find('ul').instance().scrollTop > 40).toBeTruthy();
180180

181+
// Should not crash if data count change
182+
scrollHeight = 40;
183+
data = data.slice(0, 1);
184+
wrapper.setProps({ data });
185+
181186
setTimeout(done, 50);
182187
});
183188
});

0 commit comments

Comments
 (0)