使用react-virtualized
,当您滚动list
并设置相同的scrollToIndex
时,它不会滚动回相同的索引。
有没有办法将列表重置回位置?
答案 0 :(得分:0)
那是因为道具没有改变。您可以使用scrollToCell或scrollToRow方法(取决于您是否使用Grid或List / Table)重新滚动到相同的索引。
答案 1 :(得分:0)
正如@brianvaughn所说,你列表没有再次滚动到索引,因为反应虚拟化列表组件的道具没有改变。
默认情况下,默认情况下,所有react-virtualized
个组件都会使用shallowCompare
来避免重新呈现,除非props
或state
已更改。在更新发生之前,组件不会重新呈现。
解决这个问题的方法是让react-virtualized
知道外部的变化。这可以通过几种不同的方式完成。
在文档中也提到你有两种方法可以让react-virtualized
知道某些事情发生了变化
传递道具
shallowCompare方法将检测任何道具的更改,即使它们未被声明为propTypes。这意味着您还可以传递影响单元格渲染的其他属性,以确保检测到更改。因此,当您触发virtualized
列表不会更改任何内容的事件时,您可以传递其他更改的道具。
<List
{...listProps}
sortBy={sortBy}
/>
公开方法
可以使用forceUpdate
强制重新生成网格和集合组件。对于表和列表,您需要调用forceUpdateGrid
以确保内部网格也已更新。
因此,每当您希望更新scrollToIndex
if时,其值都没有从之前的值更改,您可以在列表中调用forceUpdateGrid
。这种方法在许多其他情况下也可以派上用场
话虽如此,它可能不是最好的选择,因为如果scrollToIndex
没有改变,有强制滚动事件的另一个选项,即scrollToRow
选项。但是,它需要您要滚动的行才能显示。它不是,你不能使用它。
scrollToRow(索引:数字)
确保行可见。此方法可用于安全地向后滚动 到用户已经滚动的单元格,即使它是以前的 滚动到。