我正在使用(和材料 UI 表)react-window
创建虚拟表。react-table 7
我正在嵌入 FixedSizeList 而不是 TableBody。像这样的东西:
<TableBody {...getTableBodyProps()}>
<FixedSizeList
height={listHeight}
itemCount={rows.length}
itemSize={rowHeight}
>
{RenderRow}
</FixedSizeList>)
</TableBody>
并且 RenderRow 返回 TableRows。像这样的东西:
const RenderRow = React.useCallback( ({ index, style }) =>
{
const row = rows[index];
prepareRow(row);
const rowProps = row.getRowProps();
return (<TableRow
{...row.getRowProps({
style,
})} />);
}
由于react-window
工作原理,它创建了几个div
s 来实现列表滚动,根据需要动态嵌入所需的 TableRows,从而导致输出一个 react js 警告。
webpack-internal:///490:506 Warning: validateDOMNesting(...): <tr> cannot appear as a child of <div>
只是忽略这个警告,不是我想做的事情,因为它可能会导致其他警告不被注意到。(我也不想在测试时使用发布版本)
那么是否可以防止发出此警告?或者是否可以在react-window
不收到此警告的情况下用于表行?
更新:尝试设置innerElementType
建议tbody
。
这会更改FixedSizeList
呈现的内部 div。
从:
<div style="position: relative; height: 96px; overflow: auto; will-change: transform; direction: ltr;">
<div style="height: 96px; width: 100%;">
至
<div style="position: relative; height: 96px; overflow: auto; will-change: transform; direction: ltr;">
<tbody style="height: 96px; width: 100%;">
所以现在包含在 tbody 中。
所以我想我还需要使用outerElementType
来更改外部,来div
处理警告,但我想不出任何有效的方法......div
table
如果我不想包含 a我可以thead
设置outerElementType
为table
和innerElementType
tbody