Javascript React虚拟化AutoSizer+;砌体不';在调整大小之前无法渲染
我正在尝试在react虚拟化中绑定AutoSizer和Mashise组件。我的项目列表处于状态,并在componentDidMount()中异步显示。如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但如果我使用单独的函数,比如“rendersonry”,我会得到一个空结果,直到我调整窗口大小并触发重新渲染。我不明白为什么在这种情况下,AutoSizer不会重新渲染自己<代码>Plunkr在这里https://plnkr.co/edit/fmAqp1MOzlKGP96LeDjP 如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但是如果我使用单独的函数,比如“renderMasonry” 这是关键。每次都会重新创建一个匿名函数,因此Javascript React虚拟化AutoSizer+;砌体不';在调整大小之前无法渲染,javascript,reactjs,react-virtualized,Javascript,Reactjs,React Virtualized,我正在尝试在react虚拟化中绑定AutoSizer和Mashise组件。我的项目列表处于状态,并在componentDidMount()中异步显示。如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但如果我使用单独的函数,比如“rendersonry”,我会得到一个空结果,直到我调整窗口大小并触发重新渲染。我不明白为什么在这种情况下,AutoSizer不会重新渲染自己Plunkr在这里https://plnkr.co/edit/fmAqp1MOzlKGP96LeDjP 如果我使用简单的匿名箭
AutoSizer
的shouldComponentUpdate
会看到一个新值并返回true而不是false。(在react虚拟化文档的顶部,有一个与此相关的文档。)
在这种情况下,传递给AutoSizer
的仅有两个属性是disableHeight
和children
。如果在渲染之间两者都没有更改,则AutoSizer
本身将认为跳过重新渲染是安全的
事后看来,我不确定使用
AutoSizer
extendPureComponent
是否是一个好主意,因为重新渲染它的成本很低,而且可能会引起混淆。话虽如此,人们通常将内联函数用作react虚拟化组件的子级,这避免了上述问题。非常感谢您提供的详细答案!你救了我,使我免于发疯!如果可以的话,我会投上一百票!