<p>我正在尝试在 React JSX 中执行类似以下操作(其中 ObjectRow 是一个单独的组件):</p>
<pre class="brush:php;toolbar:false;"><tbody>
for (var i=0; i < numrows; i++) {
<ObjectRow/>
}
</tbody></pre>
<p>我意识到并理解为什么这不是有效的 JSX,因为 JSX 映射到函数调用。然而,由于来自模板领域并且是 JSX 新手,我不确定如何实现上述目标(多次添加组件)。</p>
我不确定这是否适合您的情况,但通常地图是一个很好的答案。
如果这是您使用 for 循环的代码:
<tbody> for (var i=0; i < objects.length; i++) { <ObjectRow obj={objects[i]} key={i}> } </tbody>你可以用 map 这样写一>:
<tbody> {objects.map(function(object, i){ return <ObjectRow obj={object} key={i} />; })} </tbody>ES6 语法:
<tbody> {objects.map((object, i) => <ObjectRow obj={object} key={i} />)} </tbody>将其想象为您只是调用 JavaScript 函数。您不能使用
for循环来传递函数调用的参数:return tbody( for (let i = 0; i < numrows; i++) { ObjectRow() } )查看函数
tbody如何作为参数传递给for循环 - 导致语法错误。但是您可以创建一个数组,然后将其作为参数传递:
const rows = []; for (let i = 0; i < numrows; i++) { rows.push(ObjectRow()); } return tbody(rows);在使用 JSX 时,您基本上可以使用相同的结构:
const rows = []; for (let i = 0; i < numrows; i++) { // note: we are adding a key prop here to allow react to uniquely identify each // element in this array. see: https://reactjs.org/docs/lists-and-keys.html rows.push(<ObjectRow key={i} />); } return <tbody>{rows}</tbody>;顺便说一句,我的 JavaScript 示例几乎与 JSX 示例所转换的内容完全相同。尝试使用 Babel REPL 来感受 JSX 的工作原理。