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

React-Virtualized List组件简单示例滚动无数据问题排查

React Virtualized List 滚动时下方空白问题排查

我尝试使用react-virtualized的List组件实现一个极简展示示例,以下是目前已完成的代码(省略了简单的HTML/CSS):

const { List } = ReactVirtualized
const generateRandomItem = (idx) => ({
   id: idx,
   name: faker.name.findName()
})

class App extends React.Component {
   constructor () {
      super()
      this.renderRow = this.renderRow.bind(this)
      
      // 生成模拟数据
      let items = []
      for (let i = 0, l = 1000; i < l; i++) {
         items.push(generateRandomItem(i))
      }
      this.state = {
         items: items
      }
   }
   
   renderRow({index, key}) {
      const item = this.state.items[index];
      return (
           <div>{item.name}</div>
      )
   }
   
   render () {      
      return (
         <div class="container">
            <h1>List Example</h1>
            <List
               width={600}
               height={300}
               rowHeight={40}
               rowCount={this.state.items.length}
               rowRenderer={this.renderRow}
            ></List>
         </div>
      )
   }
}

ReactDOM.render(
  <App />,
  document.getElementById('app')
)

滚动列表时,很快会发现列表下方的数据未正常显示在容器中,本该出现数据行的位置仅显示空白区域。这似乎是使用React Virtualized List组件的最简示例,请问我在这个示例中哪里出错了?


问题原因与修复方法

你忽略了rowRenderer方法中关键的style参数——React Virtualized的List组件是通过绝对定位计算并渲染可见区域内行元素的,必须将这个style参数传递给行容器,才能保证行元素被放置在正确位置。

同时,为了符合React列表渲染规范,需要把参数中的key传递给行元素。

修改后的renderRow方法如下:

renderRow({index, key, style}) {
  const item = this.state.items[index];
  return (
       <div key={key} style={style}>{item.name}</div>
  )
}

修改后滚动列表时,所有数据行都会被正确渲染到对应位置,不会再出现空白区域。

内容的提问来源于stack exchange,提问作者Darren Gates

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:27:22