J'essaie de convertir un composant jQuery en React.js et l'une des choses avec lesquelles j'ai du mal est de rendre n nombre d'éléments basés sur une boucle for.
Je comprends que ce n'est pas possible ou recommandé et que lorsqu'un tableau existe dans le modèle, il est parfaitement logique de l'utiliser map
. C'est bien, mais qu'en est-il lorsque vous n'avez pas de tableau? Au lieu de cela, vous avez une valeur numérique qui équivaut à un nombre donné d'éléments à rendre, alors que devez-vous faire?
Voici mon exemple, je veux préfixer un élément avec un nombre arbitraire de balises span en fonction de son niveau hiérarchique. Donc au niveau 3, je veux 3 balises span avant l'élément de texte.
En javascript:
for (var i = 0; i < level; i++) {
$el.append('<span class="indent"></span>');
}
$el.append('Some text value');
Je n'arrive pas à comprendre cela, ou quelque chose de similaire pour travailler dans un composant JSX React.js. Au lieu de cela, j'ai dû faire ce qui suit, en construisant d'abord un tableau temporaire à la longueur correcte, puis en bouclant le tableau.
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"
...
);
}
Cela ne peut certainement pas être le meilleur ou le seul moyen d'y parvenir? Qu'est-ce que je rate?
la source
Réponses:
Mise à jour: à partir de React> 0,16
La méthode de rendu ne doit pas nécessairement renvoyer un seul élément. Un tableau peut également être renvoyé.
OU
Docs ici expliquant les enfants JSX
VIEUX:
Vous pouvez utiliser une boucle à la place
Vous pouvez également utiliser .map et fancy es6
En outre, vous devez envelopper la valeur de retour dans un conteneur. J'ai utilisé div dans l'exemple ci-dessus
Comme le disent les documents ici
la source
Voici un exemple plus fonctionnel avec quelques fonctionnalités ES6:
la source
import React from "react"
etexport default Articles
for loop
en un tableau (ou un objet) map'able afin de restituer n nombre d'éléments dans un composant React sans avoir un tableau d'éléments. Votre solution ignore complètement ce fait et suppose que vous avez passé un tableau d'articles à partir d'accessoires.J'utilise
Object.keys(chars).map(...)
pour faire une boucle dans le rendula source
chars && ...
et.bind(this)
à la fin de ma fonction. Je suis curieux de savoir pourquoi tout simplementObject...
(et ainsi de suite) n'a pas fonctionné. J'ai continué à être indéfini.Array.from()
prend un objet itérable à convertir en un tableau et une fonction de carte facultative. Vous pouvez créer un objet avec une.length
propriété comme suit:la source
Je pense que c'est le moyen le plus simple de faire une boucle dans react js
la source