我正在使用react virtualized创建一个虚拟列表组件:
https://codesandbox.io/s/026kyjnjw(工作正常)(Autosizer将render prop作为内联函数)
https://codesandbox.io/s/ql123vqmw4(破碎)(Autosizer将渲染道具作为实例方法)
我所做的唯一更改是将render prop子代对象移动为一个实例函数,这样就不会在每个渲染器上都重新创建它。但是,这种更改会带来意想不到的结果,即在items
属性更改时不更新列表。查看Autosizer
组件源,我发现它是一个React.PureComponent
。您不认为它应该是简单的React.Component
吗?因为它不直接获取项目列表(实际上以最常用的形式,它根本不需要任何支持),所以它由rowRenderer支持。因此,如果列表发生更改,它就不会重新呈现,因为它是React.PureComponent
,并且使其重新呈现的唯一方法是使子级以内联方式呈现道具,这似乎有些hacker。