是,当使用VariableSizeList
指定itemSize
函数时。
例如
itemSize = {(i) => onGetItemSize(rows[i])}
onGetItemSize 通过以下方式测量内容:
- 如果内容很小,则返回单个行高。
- 将内容写入一个空元素,其宽度和属性与您的行相同。然后测量元件高度,然后再次清空元件。
例如:
onGetItemSize={((row) =>
{
let text = row.original.text;
// if no text, or text is short, don't bother measuring.
if (!text || text.length < 15)
return rowHeight;
// attempt to measure height by writting text to a, kind of hidden element.
let hiddenElement = document.getElementById(this.hiddenFieldName());
if (hiddenElement)
{
hiddenElement.textContent = text;
let ret = hiddenElement.offsetHeight;
hiddenElement.textContent = '';
if (ret > 0)
return Math.max(ret, rowHeight);
}
// fallback
return rowHeight;
})}
然后在 DOM 中的适当位置包含这个空元素。
<div id={this.hiddenFieldName()} style={{ visibility: 'visible', whiteSpace: 'normal' }} />