Estoy tratando de convertir un componente jQuery a React.js y una de las cosas con las que tengo dificultades es representar un número n de elementos basados en un bucle for.
Entiendo que esto no es posible o recomendado y que cuando existe una matriz en el modelo, tiene mucho sentido usarla map
. Eso está bien, pero ¿qué pasa cuando no tienes una matriz? En cambio, tiene un valor numérico que equivale a un número dado de elementos para representar, entonces, ¿qué debe hacer?
Aquí está mi ejemplo, quiero prefijar un elemento con un número arbitrario de etiquetas de extensión según su nivel jerárquico. Entonces, en el nivel 3, quiero 3 etiquetas de extensión antes del elemento de texto.
En javascript:
for (var i = 0; i < level; i++) {
$el.append('<span class="indent"></span>');
}
$el.append('Some text value');
Parece que no puedo obtener esto, o algo similar para trabajar en un componente JSX React.js. En cambio, tuve que hacer lo siguiente, primero construyendo una matriz temporal a la longitud correcta y luego haciendo un bucle de la matriz.
React.js
render: function() {
var tmp = [];
for (var i = 0; i < this.props.level; i++) {
tmp.push(i);
}
var indents = tmp.map(function (i) {
return (
<span className='indent'></span>
);
});
return (
...
{indents}
"Some text value"
...
);
}
¿Seguramente esta no puede ser la mejor o la única forma de lograrlo? ¿Qué me estoy perdiendo?
fuente
Respuestas:
Actualizado: a partir de Reaccionar> 0.16
El método de representación no necesariamente tiene que devolver un solo elemento. También se puede devolver una matriz.
O
Documentos aquí explicando sobre niños JSX
ANTIGUO:
Puedes usar un bucle en su lugar
También puedes usar .map y fancy es6
Además, debe envolver el valor de retorno en un contenedor. Usé div en el ejemplo anterior
Como dicen los documentos aquí
fuente
Aquí hay un ejemplo más funcional con algunas características de ES6:
fuente
import React from "react"
yexport default Articles
for loop
matriz (u objeto) mapeable para representar un número n de elementos en un componente Reaccionar sin tener una matriz de elementos. Su solución ignora por completo ese hecho y supone que se pasa una serie de artículos de accesorios.Estoy usando
Object.keys(chars).map(...)
para hacer un bucle en renderfuente
chars && ...
y.bind(this)
al final de mi función. Tengo curiosidad por qué simplementeObject...
(y así sucesivamente) no funcionó. Seguí indefinido.Array.from()
toma un objeto iterable para convertirlo en una matriz y una función de mapa opcional. Puede crear un objeto con una.length
propiedad de la siguiente manera:fuente
Creo que esta es la forma más fácil de bucle en reaccionar js
fuente