Jor*_*dan 7 javascript reactjs
我正在构建一个动态生成密钥的表控件(我理解这可能不是一个好主意 - 我想密钥应该与它所代表的数据唯一关联,否则React可能只为我们生成唯一的ID?),但无论哪种方式似乎钥匙没有设置,我不知道为什么.表中的行是使用可在此处找到的函数生成的.基本上我有一个辅助组件,它使用一个可选组件来转换所有子元素 - 这里是其中一个转换函数(来自TableBody组件):
const transformRows = (keyPrefix) => (children, passthroughProps) => (React.Children.map(children, (c, i) => {
return React.cloneElement(c, {
key: `${keyPrefix}-${i}`,
style: rowStyle,
className: rowClassName,
columnDefinitions: columnDefinitions,
rowData: tableData[i],
includeVerticalScrollbar,
...passthroughProps
});
}));
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我单步执行代码时,似乎正在分配密钥,但随后我在浏览器中收到一条警告,该警告会在堆栈跟踪中Each child in an array or iterator should have a unique "key" prop追溯到此处.
有任何想法吗?
克服这个问题的一种方法是用每个克隆元素包装React.Fragment并在后者上设置键。
像这样:
<>
{connections.map(connection => (
<React.Fragment key={connection.id}>
{React.cloneElement(element, connection)}
</React.Fragment>
))}
</>
Run Code Online (Sandbox Code Playgroud)
与React.addons.cloneWithProps不同,将保留原始元素的key和ref.
因此,如果您为Cell设置密钥,则每个克隆都会自动获取密钥.
| 归档时间: |
|
| 查看次数: |
4150 次 |
| 最近记录: |