我有一个具有子File组件的FileList组件。工作正常:
<tbody id="documents">
{files.map((file, i) => {
return (
<File
key={i}
id={file.id}
name={file.name}
path={file.path_lower}
tags={file.tags || []}
/>
);
})}
</tbody>
然后,当我在玩耍时,我做了一些修改,由于某种原因,它不起作用(我收到了一个js错误,指示未在文件上设置道具)。本质上,tbody中的代码被提取到一个辅助方法中。我的直觉是它与“ this”有关,但是在两种情况下,我都在同一个“ files”变量上操作,所以对我来说这没有意义。
我很好奇为什么-有人知道吗?
这是更新的代码:
render() {
const files = this.state.files;
const elementsHtml = files.map((file, index) => {
return (
<File>
key={index}
id={file.id}
name={file.name}
path={file.path_lower}
</File>
);
});
return (
<table>
<thead>
<th key="name">
Title
</th>
<th alignleft="false" key="tag">
Categories
</th>
</thead>
<tbody id="documents">
{ elementsHtml }
</tbody>
</table>
)}}
答案 0 :(得分:2)
在上一个示例中,您正在渲染File
组件错误。您没有向其传递道具,而是将其与一些孩子一起渲染。参见:
<File>
...
name={file.name}
...
</File>
不是
<File ... name={file.name}... />
所以,像这样更改它:
<File
key={index}
id={file.id}
name={file.name}
path={file.path_lower}
/>
此外,避免使用索引作为键。您在那里有一个文件ID,将其用作密钥。