Une seule ligne fonctionne bien
render: function () {
return (
{[1,2,3].map(function (n) {
return <p>{n}</p>
}}
);
}
pas pour plusieurs lignes
render: function () {
return (
{[1,2,3].map(function (n) {
return (
<h3>Item {n}</h3>
<p>Description {n}</p>
)
}}
);
}
Merci.
return ("asdf" "asdf");
vous voulezreturn ["asdf", "asdf"];
Réponses:
Essayez de considérer les balises comme des appels de fonction (voir la documentation ). Alors le premier devient:
Et le second:
Il devrait maintenant être clair que le deuxième extrait de code n'a pas vraiment de sens (vous ne pouvez pas renvoyer plus d'une valeur dans JS). Vous devez soit l'envelopper dans un autre élément (très probablement ce que vous voudriez, de cette façon vous pouvez également fournir une
key
propriété valide ), ou vous pouvez utiliser quelque chose comme ceci:Avec du sucre JSX:
Vous n'avez pas besoin d'aplatir le tableau résultant, React le fera pour vous. Voir le violon suivant http://jsfiddle.net/mEB2V/1/ . Encore une fois: envelopper les deux éléments dans une div / section sera probablement mieux à long terme.
la source
Uncaught Error: Invariant Violation: Product.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.
<div>{ this.props.foos.map(function() { return <Foo /> }) }</div>
. Mais larender
fonction du composant ne peut pas renvoyer ce tableau sans l'envelopper, par exemple dans un div.Il semble que l'ancienne réponse concernant le retour d'un tableau ne s'applique plus (peut-être depuis React ~ 0.9, comme @ dogmatic69 l'a écrit dans un commentaire ).
La documentation indique que vous devez renvoyer un seul nœud:
Dans de nombreux cas, vous pouvez simplement envelopper les choses dans un
<div>
fichier<span>
.Dans mon cas, je voulais retourner plusieurs
<tr>
s. Je les ai enveloppés dans un<tbody>
- une table peut avoir plusieurs corps.EDIT: À partir de React 16.0, le retour d'un tableau est apparemment à nouveau autorisé, tant que chaque élément a un
key
: https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html # new-render-return-types-fragments-and-stringsEDIT: React 16.2 vous permet d'entourer une liste d'éléments avec
<Fragment>…</Fragment>
ou même<>…</>
, si vous préférez cela à un tableau: https://blog.jmes.tech/react-fragment-and-semantic-html/la source
<li>
? En supposant que je ne peux pas tout emballer<ul>
<li><ul><li>one</li><li>two</li></ul></li>
si cela fonctionne dans votre situation. Ou: Un div wrapping ne serait pas strictement valide, mais peut-être qu'il fonctionne correctement dans tous les navigateurs concernés? Si vous essayez, faites-le nous savoir.li
unspan
oudiv
n'a pas bien fonctionné pour moi. Le div a sérieusement cassé le rendu et, au moins dans mon cas d'utilisation, la durée a gâché le CSS. 2 ¢: Essayer de renvoyer plusieurs sous-ensembles deli
s est une odeur de code. Nous utilisions aul
comme une sorte de menu déroulant, et je voulais au départ que de nombreux composants renvoient des "sections" deli
s. En fin de compte, il valait mieux mettre tout le code de menu dans un seul composant «ancré» àul
plutôt que chausse-pied enli
s provenant de sources multiples. Je pense que cela a également rendu le modèle mental de l'interface utilisateur un peu plus propre.À partir de React v16.0.0 , il est possible de renvoyer plusieurs éléments en les enveloppant dans un
Array
Également à partir de React v16.2.0 , une nouvelle fonctionnalité appelée
React Fragments
est introduite que vous pouvez utiliser pour envelopper plusieurs élémentsSelon la documentation:
la source
En outre, vous souhaiterez peut-être renvoyer plusieurs éléments de liste dans une fonction d'assistance à l'intérieur d'un composant React. Renvoyez simplement un tableau de nœuds html avec l'
key
attribut:la source
Vous pouvez utiliser
createFragment
ici.https://facebook.github.io/react/docs/create-fragment.html
(en utilisant la syntaxe ES6 et JSX ici)
vous devez d'abord ajouter le
react-addons-create-fragment
package:Avantage par rapport à la solution de Jan Olaf Krems: React ne se plaint pas des disparus
key
la source
Actualisé
Utilisez React Fragment. C'est simple. Lien vers la documentation des fragments.
Ancienne réponse - obsolète
Avec React> 16, vous pouvez utiliser react-composite .
Bien sûr, react-composite doit être installé.
la source
C'est simple par fragment React
<></>
etReact.Fragment
:la source