scrollToIndex不会在React-virtualized list中滚动列表

时间:2017-10-10 02:05:03

标签: reactjs react-virtualized

使用react-virtualized,当您滚动list并设置相同的scrollToIndex时,它不会滚动回相同的索引。

有没有办法将列表重置回位置?

2 个答案:

答案 0 :(得分:0)

那是因为道具没有改变。您可以使用scrollToCell或scrollToRow方法(取决于您是否使用Grid或List / Table)重新滚动到相同的索引。

答案 1 :(得分:0)

正如@brianvaughn所说,你列表没有再次滚动到索引,因为反应虚拟化列表组件的道具没有改变。

默认情况下,默认情况下,所有react-virtualized个组件都会使用shallowCompare来避免重新呈现,除非propsstate已更改。在更新发生之前,组件不会重新呈现。

解决这个问题的方法是让react-virtualized知道外部的变化。这可以通过几种不同的方式完成。

在文档中也提到你有两种方法可以让react-virtualized知道某些事情发生了变化

传递道具

shallowCompare方法将检测任何道具的更改,即使它们未被声明为propTypes。这意味着您还可以传递影响单元格渲染的其他属性,以确保检测到更改。因此,当您触发virtualized列表不会更改任何内容的事件时,您可以传递其他更改的道具。

<List
  {...listProps}
  sortBy={sortBy}
/>

公开方法

可以使用forceUpdate强制重新生成网格和集合组件。对于表和列表,您需要调用forceUpdateGrid以确保内部网格也已更新。

因此,每当您希望更新scrollToIndex if时,其值都没有从之前的值更改,您可以在列表中调用forceUpdateGrid。这种方法在许多其他情况下也可以派上用场

话虽如此,它可能不是最好的选择,因为如果scrollToIndex没有改变,有强制滚动事件的另一个选项,即scrollToRow选项。但是,它需要您要滚动的行才能显示。它不是,你不能使用它。

scrollToRow(索引:数字)

  

确保行可见。此方法可用于安全地向后滚动   到用户已经滚动的单元格,即使它是以前的   滚动到。