2017-10-10 113 views

回答

0

这是因为道具没有改变。您可以使用scrollToCell或scrollToRow方法(取决于您使用网格还是列表/表)来重新滚动到相同的索引。

0

由于@brianvaughn也说过,List不再滚动到索引,因为对react-virtualized list组件的支持没有改变。

因为默认情况下所有react-virtualized组件使用shallowCompare,以避免重新绘制,除非propsstate已经改变。在更新发生之前,组件不会重新渲染。

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

也是它,你有两种方式可以让react-virtualized知道事情有了变化

的文件中所提及直通道具

即使shallowCompare方法将检测更改任何道具,他们没有声明为propTypes。这意味着您还可以通过影响单元格渲染的其他属性来确保检测到更改。所以你可以通过额外的道具改变,当你发起一个事件时,virtualized列表不会改变任何东西。

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

公共方法

电网和收集组件可以被强制使用forceUpdate重新呈现。对于表和列表,您需要调用forceUpdateGrid以确保内部网格也被更新。

因此,无论何时您希望更新scrollToIndex,如果它的值没有从先前的值改变,您可以在列表上调用forceUpdateGrid

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

scrollToRow(指数:数)

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