Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React虚拟化AutoSizer+;砌体不';在调整大小之前无法渲染_Javascript_Reactjs_React Virtualized - Fatal编程技术网

Javascript React虚拟化AutoSizer+;砌体不';在调整大小之前无法渲染

Javascript React虚拟化AutoSizer+;砌体不';在调整大小之前无法渲染,javascript,reactjs,react-virtualized,Javascript,Reactjs,React Virtualized,我正在尝试在react虚拟化中绑定AutoSizer和Mashise组件。我的项目列表处于状态,并在componentDidMount()中异步显示。如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但如果我使用单独的函数,比如“rendersonry”,我会得到一个空结果,直到我调整窗口大小并触发重新渲染。我不明白为什么在这种情况下,AutoSizer不会重新渲染自己Plunkr在这里https://plnkr.co/edit/fmAqp1MOzlKGP96LeDjP 如果我使用简单的匿名箭

我正在尝试在react虚拟化中绑定AutoSizer和Mashise组件。我的项目列表处于状态,并在componentDidMount()中异步显示。如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但如果我使用单独的函数,比如“rendersonry”,我会得到一个空结果,直到我调整窗口大小并触发重新渲染。我不明白为什么在这种情况下,AutoSizer不会重新渲染自己<代码>Plunkr在这里https://plnkr.co/edit/fmAqp1MOzlKGP96LeDjP

如果我使用简单的匿名箭头函数来渲染砖石,一切都正常。但是如果我使用单独的函数,比如“renderMasonry”

这是关键。每次都会重新创建一个匿名函数,因此
AutoSizer
shouldComponentUpdate
会看到一个新值并返回true而不是false。(在react虚拟化文档的顶部,有一个与此相关的文档。)

在这种情况下,传递给
AutoSizer
的仅有两个属性是
disableHeight
children
。如果在渲染之间两者都没有更改,则
AutoSizer
本身将认为跳过重新渲染是安全的


事后看来,我不确定使用
AutoSizer
extend
PureComponent
是否是一个好主意,因为重新渲染它的成本很低,而且可能会引起混淆。话虽如此,人们通常将内联函数用作react虚拟化组件的子级,这避免了上述问题。

非常感谢您提供的详细答案!你救了我,使我免于发疯!如果可以的话,我会投上一百票!