【问题标题】:React Virtualized AutoSizer + Masonry doesn't render until resizedReact Virtualized AutoSizer + Masonry 在调整大小之前不会渲染
【发布时间】:2017-08-26 13:20:40
【问题描述】:

我正在尝试在 react-virtualized 中绑定 AutoSizer 和 Masonry 组件。我的项目列表处于状态并异步显示在 componentDidMount() 中。如果我使用简单的匿名箭头函数来渲染砌体,一切都很好。但是如果我使用像“renderMasonry”这样的单独函数,我会得到一个空结果,直到我调整窗口大小并触发重新渲染。我不明白为什么在这种情况下 AutoSizer 不会重新渲染。 Plunkr is here https://plnkr.co/edit/fmAqp1MOzlKGP96LeDjP

【问题讨论】:

    标签: javascript reactjs react-virtualized


    【解决方案1】:

    如果我使用简单的匿名箭头函数来渲染 Masonry,一切正常。但是如果我使用像“renderMasonry”这样的单独功能......

    这是关键。每次都会重新创建一个匿名函数,因此 AutoSizershouldComponentUpdate 看到一个新值并返回 true 而不是 false。 (在 react-virtualized 文档的顶部附近,有一个与此相关的 section titled "Pure Components"。)

    在这种情况下,传递给AutoSizer 的仅有两个属性是disableHeightchildren。如果在渲染之间这些都没有变化,那么AutoSizer 本身会认为跳过重新渲染是安全的。

    事后看来,我不确定拥有AutoSizer 扩展PureComponent 是否是一个好主意,因为重新渲染它的成本很小并且混淆的可能性很大。话虽如此,人们通常将内联函数用作反应虚拟化组件的子函数,这样可以避免上述问题。

    【讨论】:

    • 非常感谢您的详细解答!
    • 你让我免于发疯!如果可以的话,我会投票一百次!
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多