Если у вас еще нет массива, map()
которому нравится ответ @ FakeRainBrigand, и вы хотите вставить его так, чтобы компоновка источника соответствовала выводу ближе, чем ответ @ SophieAlpert:
С синтаксисом ES2015 (ES6) (функции разворота и стрелок)
http://plnkr.co/edit/mfqFWODVy8dKQQOkIEGV?p=preview
<tbody>
{[...Array(10)].map((x, i) =>
<ObjectRow key={i} />
)}
</tbody>
На странице caveats говорится, что Array.from
это требуется для распространения, но в настоящее время ( v5.8.23
) этого не происходит при распространении фактического Array
. У меня есть проблема с документацией, чтобы прояснить это. Но используйте на свой страх и риск или polyfill.
Ваниль 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>
);
}
С синтаксисом и Array
методами ES2015
С этим Array.prototype.fill
вы можете сделать это в качестве альтернативы использованию спреда, как показано выше:
<tbody>
{Array(10).fill(1).map((el, i) =>
<ObjectRow key={i} />
)}
</tbody>
(Я думаю, что вы могли бы опустить любой аргумент fill()
, но я не на 100% об этом.) Спасибо @FakeRainBrigand за исправление моей ошибки в более ранней версии fill()
решения (см. Ревизии).
key
Во всех случаях key
attr снимает предупреждение с помощью сборки разработки, но недоступен для ребенка. Вы можете передать дополнительный атрибут, если хотите, чтобы индекс имелся у ребенка. Смотрите списки и ключи для обсуждения.