【问题标题】:How can the react-virtualized CellMeasurer re-render connected components that have dynamic height?react-virtualized CellMeasurer 如何重新渲染具有动态高度的连接组件?
【发布时间】:2017-04-01 01:30:22
【问题描述】:

react-virtualized 项目使我能够有效地呈现非常大的组件列表。在我的项目中,列表项是容器组件,即连接到 redux 存储的组件。他们只知道自己的 ID,而容器组件负责获取所有相关数据,例如正文、日期、用户名等。

我面临的问题是计算这些组件的高度。 React-virtualized 有一个 CellMeasurer component 用于计算动态高度,但 CellMeasurer 测量组件默认状态的高度,在我的容器组件中为 0,因为容器组件在渲染时尚未获取数据第一次。

有没有办法在容器加载内容时强制重新计算组件高度?

【问题讨论】:

    标签: redux react-virtualized


    【解决方案1】:

    react-virtualized 积极缓存测量和位置数据以提高性能。它提供了一个 API 来重置特定行或列的数据。 :)

    您可能会发现this demo 很有用。它强调的关键部分是 - 如果行(或列)大小可能发生变化 - 您需要首先让 CellMeasurer 知道重新测量该行。 resetMeasurements 重置所有测量值,但如果仅更改了一行,则使用 resetMeasurementForRow(index)(或者,您猜对了,resetMeasurementForColumn(index))会更高效。

    接下来,您需要让List(或TableGrid)知道大小也发生了变化——因为大小会影响位置并且这些组件会缓存位置数据。如果您使用的是TableList,那么您要使用的方法是recomputeRowHeights(index)。如果您使用的是Grid,那么它将是recomputeGridSize ({ columnIndex, rowIndex })

    【讨论】:

    • 谢谢布赖恩,你真棒!
    • 这些方法是否已弃用?我似乎在代码库的任何地方都找不到 resetMeasurements。
    • Tom,您需要将CellMeasurerCacheCellMeasurer 一起使用。前者有方法clear(row, col)clearAll()
    猜你喜欢
    • 2018-04-28
    • 2017-04-27
    • 2018-02-10
    • 2021-06-20
    • 2017-04-20
    • 2017-11-20
    • 2020-09-29
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多