Dans React 16.2, un support amélioré pour Fragments
a été ajouté. Plus d'informations peuvent être trouvées sur le blog de React ici.
Nous connaissons tous le code suivant:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Oui, nous avons besoin d'un conteneur div, mais ce n'est pas si grave.
Dans React 16.2, nous pouvons le faire pour éviter le conteneur div environnant:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
Dans les deux cas, nous avons toujours besoin d'un élément conteneur entourant les éléments internes.
Ma question est, pourquoi est-il Fragment
préférable d' utiliser un ? Cela aide-t-il à la performance? Si oui, pourquoi? J'adorerais un aperçu.
div
est que vous ne voulez pas toujours un élément wrapper. Les éléments wrapper ont une signification et vous avez généralement besoin de styles supplémentaires pour que cette signification soit supprimée.<Fragment>
est juste du sucre syntaxique qui n'est pas rendu. Il y a des situations où la création d'un wrapper est très difficile, par exemple en SVG où<div>
ne peut pas être utilisé et<group>
n'est pas toujours ce que vous voulez.Réponses:
div
s au milieu rend difficile le maintien de la mise en page souhaitée lors de l'extraction des composants logiques.Vous pouvez trouver les descriptions de certains autres cas d'utilisation dans ce problème React: Ajouter une API de fragment pour permettre le retour de plusieurs composants à partir du rendu
la source
<dt><dd>
devient beaucoup plus facile. Le retour d'éléments appariés était auparavant gênantFragments
.import Fragment from 'react'
. Mais ce n'est pas défini dans RN.number 2
, les tables ont été le plus gros problème pour nous. La structure nécessaire detable>tr>td
(éventuellement avecthead
et similaire) a créé du code React gênant.import {Fragment} from 'react'
? c'est une exportation nommée.Ajoutant à toutes les réponses ci - dessus il y a un autre avantage: la lisibilité du code , des
Fragment
supports composant une forme de sucre syntaxique,<>
. Ainsi, le code de votre question peut être écrit plus facilement comme:Selon la documentation ,
Sans encombrement, non?
Notez que vous devez toujours utiliser
<Fragment>
syntaxe si vous devez fournirkey
au fragment.la source
<Fragment>
C'est aussi simple que lorsque vous n'avez pas besoin d'un élément wrapper, vous n'êtes pas obligé d'en utiliser un. Avoir moins d'éléments est génial, mais je pense que le plus grand avantage est de pouvoir rendre des éléments en jsx qui n'étaient pas possibles auparavant et d'ajouter une meilleure signification sémantique aux éléments wrapper car ils sont maintenant optionnels.
Ce n'était pas possible avant:
En regardant ce qui suit dans React 15, vous ne pouvez pas dire si l'élément wrapper est nécessaire ou non:
la source
Selon la documentation de reactjs.org, les besoins les plus importants de la
<Fragment> </Fragment>
place de div sont d'éviter de casser la sémantique HTML. Lorsque nous utilisons des div au lieu de<Fragment> </Fragment>
nous cassons la sémantique HTML.Pour en savoir plus sur la sémantique html. s'il vous plaît cliquer et il y a aussi des cas où si vous utilisez des div au lieu de fragments, ce sera du html invalide, par exemple regardez ce code:
Les fragments résolvent ce problème.
la source
<React.Fragment>...</React.Fragment>
, nous pouvons ajouter une balise parent à nos éléments JSX sans ajouter un nœud supplémentaire au DOM.<>...</>.
la source