Se você ainda não possui uma matriz para map()
gostar da resposta de @ FakeRainBrigand e deseja incorporar isso, o layout de origem corresponde à saída mais próxima da resposta de @ SophieAlpert:
Com sintaxe do ES2015 (ES6) (funções de propagação e seta)
http://plnkr.co/edit/mfqFWODVy8dKQQOkIEGV?p=preview
<tbody>
{[...Array(10)].map((x, i) =>
<ObjectRow key={i} />
)}
</tbody>
Re: transpiling com Babel, sua página de advertências diz que Array.from
é necessário para a propagação, mas no momento ( v5.8.23
) isso não parece ser o caso ao espalhar um real Array
. Eu tenho um problema de documentação aberto para esclarecer isso. Mas use por seu próprio risco ou polyfill.
Vanilla ES5
Array.apply
<tbody>
{Array.apply(0, Array(10)).map(function (x, i) {
return <ObjectRow key={i} />;
})}
</tbody>
Inline 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>
Combinação de técnicas de outras respostas
Mantenha o layout de origem correspondente à saída, mas torne a peça incorporada mais compacta:
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>
);
}
Com sintaxe e Array
métodos do ES2015
Com Array.prototype.fill
você, você poderia fazer isso como uma alternativa ao uso do spread, como ilustrado acima:
<tbody>
{Array(10).fill(1).map((el, i) =>
<ObjectRow key={i} />
)}
</tbody>
(Acho que você realmente pode omitir qualquer argumento fill()
, mas não sou 100% nisso.) Obrigado a @FakeRainBrigand por corrigir meu erro em uma versão anterior da fill()
solução (consulte as revisões).
key
Em todos os casos, o key
attr alivia um aviso com a construção do desenvolvimento, mas não está acessível no filho. Você pode passar um atributo extra se desejar que o índice esteja disponível no filho. Consulte Listas e chaves para discussão.