在我滚动之前,react-virtualized 列表项不会使用更改的道具重新渲染

Dom*_*nic 6 javascript reactjs react-virtualized

我有一个像这样的反应虚拟化列表(使用 List 组件):

renderItem = ({ index, key, style }) => {
  const {
    entries,
    projectId,
  } = this.props;
  const entry = entries[index];

  return (
    <div key={key} style={style}>
      <MyItem
        entry={entry}
        entryIndex={index}
        projectId={projectId}
      />
    </div>
  );
}

<List
  rowHeight={75}
  rowRenderer={this.renderItem}
  rowCount={entries.length}
  width={780}
  height={1000}
/>
Run Code Online (Sandbox Code Playgroud)

MyItem连接到一个 redux store 并且可以交互。但是,在我滚动列表之前,它不会反映屏幕上的任何更改,一旦我滚动,我就会看到列表项,因为它应该与更新一起MyItem's render()被调用。

当道具更改时,如何进行反应虚拟化以重新呈现列表项?

Cha*_*man 9

我很确定您可以简单地将有问题的道具传递到您的列表中。它看起来像这样。

<List
  rowHeight={75}
  rowRenderer={this.renderItem}
  rowCount={entries.length}
  width={780}
  height={1000}
  data={entries} // this prop can be called anything
/>
Run Code Online (Sandbox Code Playgroud)

当然,列表实际上并没有名为 的道具data,但是将您的数据集作为道具传递会告诉列表在数据更改时重新呈现。

在底层,List 和其他组件使用 PureComponent,它会在您传递给它们的 props 发生变化时触发重新渲染。您可以在此处阅读更多相关信息

注意:我实际上从未使用列表组件完成此操作,但已使用 MultiGrid 组件完成此操作。在我的用例中,我允许用户对数据进行排序,并且需要将数据集传递给 MultiGrid,以便在数据更改时重新呈现。

希望这可以帮助。