@FakeRainBrigand の回答を気に入る配列をまだ持っておらずmap()
、これをインライン化したい場合は、ソース レイアウトが @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%ではありません。)ソリューションの以前のバージョンでの私の間違いを修正してくれた@FakeRainBrigandに感謝しますfill()
(リビジョンを参照)。
key
いずれの場合も、key
attr は開発ビルドの警告を緩和しますが、子ではアクセスできません。子で使用可能なインデックスが必要な場合は、追加の attr を渡すことができます。議論については、リストとキーを参照してください。