javascript - 如何测量 react 虚拟化列表中的行高

标签 javascript react-virtualized

我有点不确定如何使用 react-virtualized 实现列表的动态高度.

我有一个组件如下:

import { List } from 'react-virtualized';
<List
    height={400}
    rowCount={_.size(messages)}
    rowHeight={(index) => {
        return 100; // This needs to measure the dom.
    }}
    rowRenderer={({ key, index, style }) => <Message style={style} {...messages[index]} />}}
    width={300}
/>

我看过使用 CellMeasurer根据文档说它可以与 List 组件一起使用,但我不知道这个例子实际上是如何工作的......

我还尝试弄清楚它是如何在 demo code 中实现的但也走到了死胡同。

有人可以帮助我了解如何测量 DOM 以动态获取每个项目的高度。

最佳答案

抱歉,您发现文档令人困惑。我将尝试更新它们以使其更清晰。希望这会有所帮助:

import { CellMeasurer, List } from 'react-virtualized';

function renderList (listProps) {
  return (
    <CellMeasurer
      cellRenderer={
        // CellMeasurer expects to work with a Grid
        // But your rowRenderer was written for a List
        // The only difference is the named parameter they
        // So map the Grid params (eg rowIndex) to List params (eg index)
        ({ rowIndex, ...rest }) => listProps.cellRenderer({ index: rowIndex, ...rest })
      }
      columnCount={1}
      rowCount={listProps.rowCount}
      width={listProps.width}
    >
      {({ getRowHeight, setRef }) => (
        <List
          {...listProps}
          ref={setRef}
          rowHeight={getRowHeight}
        />
      )}
    </CellMeasurer>
  )
}

这个组件也有demo here显示它是如何使用的。

关于javascript - 如何测量 react 虚拟化列表中的行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39600808/

相关文章:

javascript - 修改无效的javascript

javascript - 如何创建一个元素而不仅仅是将其放置在页面上

javascript - react-virtualized - 带有 Masonry 的 InfiniteLoader 不起作用

javascript - 虚拟表自动高度的三元运算符

javascript - 正则表达式查找句子中的最后一个单词

javascript - 为什么 (true > null) 在 JavaScript 中总是返回 true?

javascript - 在等待时执行延迟函数所依赖的代码

javascript - 形成在重复小数内查找模式的正则表达式

javascript - 将react-virtualized List的当前索引设置为状态时发生错误

reactjs - 如何使用 react 虚拟化制作响应式图像网格