You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-window-infinite-loader加载更多时滚动条自动回到顶部问题求助

问题原因

List组件绑定的key属性包含了data.length,每次加载新数据后data.length会更新,React会将其识别为全新组件,销毁原有实例重新渲染,滚动位置就会被重置到顶部。

修复方法

调整List组件的key属性,移除data.length变量,仅保留和容器尺寸相关的参数,只有宽高变化时才需要重新渲染List:

<List
  // 仅保留宽高作为key的计算变量
  key={`${width}${height}`}
  height={height}
  width={width}
  itemCount={data.length}
  itemSize={162}
  onItemsRendered={onItemsRendered}
  ref={ref}
>
可选优化项
  • 修正isItemLoaded的判断逻辑,避免加载判断异常:
const isItemLoaded = loadedCount => index => index < loadedCount;

// InfiniteLoader 绑定isItemLoaded时传入当前已加载的data长度
<InfiniteLoader
  isItemLoaded={isItemLoaded(data.length)}
  itemCount={itemCount}
  loadMoreItems={loadMoreData}
>
  • 替换DataCard的key为数据唯一标识,不要使用数组下标,避免列表项渲染错乱:
<DataCard
  // 替换为数据中实际的唯一字段,比如记录id、用户id等
  key={'visitor_' + data[index].id}
  {...data[index]}
/>

内容的提问来源于stack exchange,提问作者Sarang Khajuria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:21:00