map()
@FakeRainBrigandの答えが好きな配列がまだない場合、これをインライン化して、ソースレイアウトが@SophieAlpertの答えよりも近い出力に対応するようにするには、次のようにします。
ES2015(ES6)構文(スプレッドおよび矢印関数)
http://plnkr.co/edit/mfqFWODVy8dKQQOkIEGV?p=preview
<tbody>
{[...Array(10)].map((x, i) =>
<ObjectRow key={i} />
)}
</tbody>
Re:Babelを使ったトランスパイル、その警告のページでは、これArray.from
は拡散に必要であると述べていますが、現時点(v5.8.23
)では、実際の拡散ではそうではないようですArray
。ドキュメントに問題がありますを明確にするために開いています。ただし、自己責任またはポリフィルで使用してください。
バニラES5
Array.apply
<tbody>
{Array.apply(0, Array(10)).map(function (x, i) {
return <ObjectRow key={i} />;
})}
</tbody>
インラインIIFE
http://plnkr.co/edit/4kQjdTzd4w69g8Suu2hT?p=preview
<tbody>
{(function (rows, i, len) {
while (++i <= len) {
rows.push(<ObjectRow key={i} />)
}
return rows;
})([], 0, 10)}
</tbody>
他の回答からのテクニックの組み合わせ
出力に対応するソースレイアウトを維持しますが、インライン化された部分をよりコンパクトにします。
render: function () {
var rows = [], i = 0, len = 10;
while (++i <= len) rows.push(i);
return (
<tbody>
{rows.map(function (i) {
return <ObjectRow key={i} index={i} />;
})}
</tbody>
);
}
ES2015の構文とArray
メソッド
Array.prototype.fill
あなたが上に示したように広がりを使用する代わりにこれを行うことができます:
<tbody>
{Array(10).fill(1).map((el, i) =>
<ObjectRow key={i} />
)}
</tbody>
(私はあなたが実際にに任意の引数を省略できると思いますがfill()
、私はそれについて100%ではありません。)以前のバージョンのfill()
ソリューションでの私の間違いを修正してくれた@FakeRainBrigandに感謝します(改訂を参照)。
key
すべての場合において、key
attrは開発ビルドでの警告を緩和しますが、子ではアクセスできません。子で使用可能なインデックスが必要な場合は、追加のattrを渡すことができます。説明については、リストとキーを参照してください。