- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 react-virtualized Table 来渲染一个包含多行的表。由于固定的列宽,我不希望我的长文本被修剪,所以我想使用 CellMeasurer 来动态测量宽度。
这是一个使用 Grid 的示例。它工作正常。
render() {
const {width} = this.props;
return (
<Grid
className={styles.BodyGrid}
columnCount={1000}
columnWidth={this._cache.columnWidth}
deferredMeasurementCache={this._cache}
height={400}
overscanColumnCount={0}
overscanRowCount={2}
cellRenderer={this._cellRenderer}
rowCount={50}
rowHeight={35}
width={width}
/>
);
}
Table
也不是
Column
有
deferredMeasurementCache
支柱。我当前的代码如下所示:
return (
<div>
<AutoSizer disableHeight>
{({width}) => (
<Table
ref="Table"
disableHeader={disableHeader}
headerClassName={styles.headerColumn}
headerHeight={headerHeight}
height={height}
noRowsRenderer={this._noRowsRenderer}
overscanRowCount={overscanRowCount}
rowClassName={this._rowClassName}
rowHeight={useDynamicRowHeight ? this._getRowHeight : rowHeight}
rowGetter={rowGetter}
rowCount={rowCount}
scrollToIndex={scrollToIndex}
sort={this._sort}
sortBy={sortBy}
sortDirection={sortDirection}
width={width}>
<Column
label="Index"
cellDataGetter={({rowData}) => rowData.index}
dataKey="index"
disableSort={!this._isSortEnabled()}
width={60}
/>
<Column .../>
</Table>
)}
</Autosizer>
</div>
);
Measurer
在表?
最佳答案
react-virtualized 的文档化 API 不支持使用 CellMeasurer
在 Table
.这在 react 虚拟化中留下了一些选项,包括:
Grid
实现和外部列标题 Table
实现API 中未记录对内部组件的依赖 Table
使用 Grid
在内部提供虚拟化滚动,但不会在需要的地方在 API 中公开它。 Grid
只有一列,其中包含所有 Column
一行中的单元格,但 Grid
作为渲染的父级传递 Column
细胞。结果,一个Grid
单元格可以关联很多 Column
细胞,这种情况Grid
和 CellMeasurer
不支持。 CellMeasurer
在 Grid
取决于 Grid
直接管理一行中的所有单元格,无需干预 rowRenderer
, 而 Table
有自己的行渲染逻辑。 Table
的组件的成员。或者在某些情况下,可能作为 Prop 传递给包含
Table
的组件。 .]
cellCache
是个人高度
Column
细胞。
rowCache
是用于行的高度。
const cellCache = new CellMeasurerCache({
fixedWidth: true,
defaultHeight: 20, // keep this <= any actual row height
minHeight: 10, // keep this <= any actual row height
});
const rowCache = new CellMeasurerCache({
fixedWidth: true,
defaultHeight: 37, // tune as estimate for unmeasured rows
minHeight: 10, // keep this <= any actual row height
});
Table
成分:
rowCache
作为 deferredMeasurementCache
Prop rowRenderer
功能rowHeight
功能 <Table
...
deferredMeasurementCache={rowCache}
rowRenderer={rowRenderer}
rowHeight={rowHeight}
>
Table
不会对
deferredMeasurementCache
做任何事情除了将它作为 Prop 传递给
Table
的
Grid
.
Column
需要测量的,加一个
cellRenderer
功能。在许多更简单的情况下,相同的函数可用于所有测量列:
<Column
...
cellRenderer={measuredCellRenderer}
/>
const aMeasuredColumnIndex = 2; // any measured column index will do
let rowParent = null; // let a cellRenderer supply a usable value
const cellParent = { // an intermediary between measured row cells
// and their true containing Grid
invalidateCellSizeAfterRender: ({rowIndex}) => {
if (rowParent &&
typeof rowParent.invalidateCellSizeAfterRender == 'function') {
rowParent.invalidateCellSizeAfterRender({columnIndex: 0, rowIndex});
}
},
}
rowParent
用于将表格的网格暴露给 rowRenderer。
cellParent
作为两个缓存之间和行之间的中介,其
Column
单元格,以及
Table
的
Grid
.
function measuredCellRenderer({rowIndex, columnIndex, parent, cellData}) {
rowParent = parent; // parent is the Table's grid,
// save it for use by rowRenderer
return (
<CellMeasurer
cache={cellCache}
columnIndex={columnIndex}
parent={cellParent}
rowIndex={rowIndex}
>
<div>{cellData}</div>
</CellMeasurer>
);
// Note: cellData is wrapped in a <div> to facilitate height
// styling, for example adding padding to the <div>, because CellMeasurer
// measures the height of the content box.
}
function rowRenderer(params) {
return (
<CellMeasurer
cache={rowCache}
columnIndex={0}
key={params.key}
parent={rowParent}
rowIndex={params.rowIndex}
>
{Table.defaultProps.rowRenderer(params)}
</CellMeasurer>
);
}
function rowHeight({index}) {
let cellCacheRowHeight = cellCache.rowHeight({index});
if (cellCache.has(index, aMeasuredColumnIndex)) {
rowCache.set(index, 0, 20, cellCacheRowHeight);
// the 20 above is a somewhat arbitrary number for width,
// which is not relevant
}
return cellCacheRowHeight;
}
CellMeasurer
有两种不同的用法。 .一个是在
measuredCellRenderer
里面功能和用途
cellCache
和
cellParent
.另一个在
rowRenderer
里面功能和用途
rowCache
和
rowParent
.
rowHeight
函数不只是报告行的高度。它还负责传输行的
rowHeight
在
cellCache
到
rowCache
中第一列也是唯一一列的行单元格高度.
CellMeasurerCache
需要。单个缓存可以满足
cellCache
和
rowCache
.其结果:
cellParent
;它可以被移除。引用 cellParent
可以替换为对 rowParent
的引用,或者在 measuredCellRenderer
的情况下函数,CellMeasurer
parent
prop 可以直接设置为 parent
函数参数。 measuredCellRenderer
, CellMeasurer
需要为 columnIndex={0}
进行硬编码,即使被测列不是表中的第一列。 if
rowHeight
里面的声明由于无需在两个缓存之间传输高度,因此可以删除该功能。 aMeasuredColumnIndex
可以删除,因为它只在 rowHeight
中被引用if
陈述。 关于reactjs - 如何在 react 虚拟化表中使用 CellMeasurer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51826454/
我在使用自定义 ListView 时遇到了一些问题(滚动 ListView 时内部的复选框丢失了它们的状态)。我可以在不枚举可视化树的情况下禁用 ListView 虚拟化吗?
我有一个 ItemsControl包含我想虚拟化的数据列表,但是 VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于 ItemsControl . 真
有没有人有我可以在 WPF 应用程序中使用的功能虚拟化 WrapPanel? 我已经在 http://virtualwrappanel.codeplex.com/ 下载并尝试了实现.但是,我收到以下异
我试图弄清楚这个虚拟化功能,我不确定我是否理解错误或发生了什么,但我正在使用 ANTS 内存分析器来检查虚拟化 TreeView 中的项目数,它只是不断增加。我有一个包含 1,001 个项目(1 个根
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
我们正在尝试想出一种虚拟化 TreeView 的好方法,数据并不是真正的问题,因为它非常轻(每个项目大约 16 字节),问题是我们可能有数万个,虽然实际数据只占用 160 kb 内存,但 TreeVi
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
WPF 4 是否还包含一个虚拟化的 WrapPanel,或者从现有面板派生一个是否容易。我想制作一个地址 View ,例如 outlook。 最佳答案 我认为不可能实现具有完全虚拟化(双向)的 Wra
我有一个 VB6 应用程序,我已经销售了 12 年多。有时我的用户很难让应用程序运行。数据写入将进入/My Documents,因此除了安装文件(EXE 等)之外什么都没有进入 C:\Program
我试图将一个新环境的要求放在一起,以包含运行 Sql Server 的 TeamCity、几个构建代理(目前)和一个 SVN 存储库。 目前有 6 个开发人员,将有 5 个活跃的解决方案参与 CI 过
关注 this question和 this question ,现在我有一个带有分层数据的 TreeView,如下图所示: 由于数据量大,我转了Virtualization TreeView 的属性
是否有一种简单的方法可以禁用 ListBox 控件上的 UI 虚拟化?我尝试使用“FindName()”方法在 ListBox 控件中查找控件,但如果该控件明显位于 Web 浏览器窗口之外,则无法找到
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我有一个基于 .NET 4.0 的 Winform 应用程序,我使用 Spoon Virtual Application Studio 2012 对其进行了虚拟化。 当我使用 VS 2010 构建应用
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我正在使用“react-virtualized”中的表。一切都很顺利。 我使用 rowRenderer 自定义了我的行,以添加“react-dnd”并让我的行能够被拖动。 我的问题是关于细胞的。可以定
我正在尝试弄清楚是否可以创建一个 SQL 函数,将参数行视为“鸭子类型”。也就是说,我希望能够传递来自具有某些公共(public)列名的不同表或 View 的行,并在函数内对这些列进行操作。 这里有一
我正在构建一个程序,该程序在主程序文件之外具有多个外部库和扩展。我的项目总大小为 134.2 MB。我想用 Turbo Studio 制作它的便携版本,但我面临一个明显的问题;在捕获文件并构建项目后,
这是我试图通过 WPF 实现的目标。 wrappanel 中作为标题和下方按钮的文本 block 。问题是这需要滚动等。我已经使用 ItemsControl 和每个组的绑定(bind)实现了这一点。我
今天我决定最终尝试虚拟化 TreeView。要做到这一点,绑定(bind)是必需的。所以我决定测试两件事——基于类型的 HierarchicalDataTemplate + 虚拟化。 我为一些数据创建
我是一名优秀的程序员,十分优秀!