Par exemple pourrais-je faire:
import React from 'react';
import PanelA from './panelA.jsx';
import PanelB from './panelB.jsx';
React.render(
<PanelA />
<PanelB />,
document.body
);
où React rendrait:
body
PanelA
PanelB
Actuellement, je reçois l'erreur:
Adjacent JSX elements must be wrapped in an enclosing tag
en transpirant avec browserify et babelify
Depuis la version React v16.0), vous pouvez générer un tableau de composants sans encapsuler les éléments dans un élément supplémentaire lorsque vous vous trouvez dans un composant:
render() {
return [
<li key="one">First item</li>,
<li key="two">Second item</li>,
<li key="three">Third item</li>,
<li key="four">Fourth item</li>,
];
}
N'oubliez que de définir les clés.
Dans le ReactDOM.render
vous ne pouvez toujours pas restituer plusieurs éléments, car react nécessite une racine. Ainsi, vous pouvez rendre un seul composant à l'intérieur de la ReactDOM.render
et restituer un tableau d'éléments dans le composant interne.
Depuis la version 16.2, <React.Fragment />
(Ou <></>
En abrégé) a été introduit, vous pouvez donc utiliser des conditions. C'est la voie préférable.
return (
<React.Fragment>
<h1>Page title</h1>
<ContentComponent />
{this.props.showFooter && (
<footer>(c) stackoverflow</footer>
)}
</React.Fragment>
)
Depuis React 16, vous pouvez renvoyer une liste de composants à partir de la méthode render()
]. Le métier de ce produit ne permet pas de conditionner facilement le rendu et vous devez ajouter key
attribut à chaque composant de la liste.
return [
<h1 key="page-title">Page</h1>,
<ContentComponent key="content" />,
<footer>(c)stackoverflow</footer>
]
Dans les anciennes versions de React, vous ne pouvez pas restituer plusieurs composants sans les envelopper dans un élément englobant (balise, composant). par exemple:
return (
<article>
<h1>title</h1>
<meta>some meta</meta>
</article>
)
Si vous voulez vraiment les utiliser comme un seul élément, vous devez créer un module à partir d’eux.
Emballez simplement vos composants multiples dans une seule balise. Par exemple:
React.render(
<div>
<PanelA />
<PanelB />
</div>,
document.body
);
Avant React 16, plusieurs éléments de niveau supérieur dans le même render()
exigent de tout envelopper dans un élément parent (généralement un <div>
):
render () {
return (
<div>
<Thing1 />
<Thing2 />
</div>
)
}
React 16 a introduit la possibilité de restituer un tableau d'éléments de premier niveau (avec un avertissement indiquant qu'ils doivent tous avoir des clés uniques):
render () {
return ([
<Thing1 key='thing-1' />,
<Thing2 key='thing-2' />
])
}
React 16.2 a introduit l’élément <Fragment>
, Qui fonctionne exactement comme le <div>
Dans le premier exemple mais ne laisse pas de parent inutile <div>
Traîner dans le DOM:
import React, { Fragment } from 'react'
...
render () {
return (
<Fragment>
<Thing1 />
<Thing2 />
</Fragment>
)
}
Il existe une syntaxe abrégée pour cela, mais il n'est pas encore supporté par la plupart des outils (par exemple, les surligneurs de syntaxe):
import React from 'react'
...
render () {
return (
<>
<Thing1 />
<Thing2 />
</>
)
}
Si vous souhaitez rendre plusieurs composants en sortie, vous devez les imbriquer les uns dans les autres afin de conserver la structure arborescente. Ceci est expliqué sur leur page de documentation pour Plusieurs composants
En fin de compte, tant qu’il en existe un Node au niveau supérieur, cela peut fonctionner.
Vous pouvez utiliser un seul élément DOM tel qu'un <div>
<div>
<PanelA />
<PanelB />
</div>
Cependant, à mesure que vous créez des applications plus complexes et que vous avez plus de composants interconnectés, il peut être préférable d’envelopper des composants enfants dans un parent, comme ceci.
import React from 'react';
import PanelA from './panelA.jsx';
import PanelB from './panelB.jsx';
var PanelHolder = React.createClass({
render: function() {
return (
<div>
<PanelA />
<PanelB />
</div>
)
}
});
Et puis dans votre fichier js principal, vous feriez:
import React from 'react';
import PanelHolder from './panelHolder.jsx';
React.render(
<PanelHolder />
document.body
);