我希望我的RenderDOM
为数组中找到的每个对象呈现一个组件。我正在用JSX构建渲染,我的代码如下:
ReactDOM.render((
<div className="container container-collapsed">
<Actions Units={aUnits} />
<div className="units-wrapper">
{
aUnits.forEach(u=> {
return <Unit unit={u} />
})
}
</div>
</div>
), document.getElementById("root"));
我期望输出是这样的:
<div class="container container-collapsed">
<div class="actions-panel_true"></div>
<div class="units-wrapper">
<div class="unit1"></div>
<div class="unit2"></div>
<div class="unit3"></div>
</div>
</div>
而我得到的却是:
<div class="container container-collapsed">
<div class="actions-panel_true"></div>
<div class="units-wrapper"><div>
</div>
我知道我的foreach是工作的,我调试了它。但它并没有像我期望的那样为每个单元构建一个JSX。我如何使这个foreach循环为我的数组中的每个对象返回一个组件,回到我试图渲染的JSX ?
您需要.map
而不是.forEach
返回数组,以便React可以有效地渲染它。
也从.forEach
内部的回调返回没有使用,因为.forEach
不返回数组。它返回undefined
。
.forEach
在您想要更改现有数组的内容而不返回新数组时非常有用。在, JSX需要一个数组作为.map
操作的结果。
@zhulien也涵盖了更多有效的观点
应该这样做:
ReactDOM.render((
<div className="container container-collapsed">
<Actions Units={aUnits} />
<div className="units-wrapper">
{aUnits.map(unit => {
return (
<Unit key={u.key} unit={u} />
);
})}
</div>
</div>
), document.getElementById("root"));
注意事项:
<Unit={u} />
不是一个有效的语法。您应该将u
分配给Unit
组件的属性,而不是组件本身。此外,在呈现项目数组时,您应该为每个项目提供key
属性,以帮助React区分它们。你可以在React文档中找到更多关于为什么这很重要的信息。