En React 16.2, Fragments
se agregó soporte mejorado para . Puede encontrar más información en la publicación del blog de React aquí.
Todos estamos familiarizados con el siguiente código:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Sí, necesitamos un contenedor div, pero no es tan importante.
En React 16.2, podemos hacer esto para evitar el contenedor circundante div:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
En cualquier caso, aún necesitamos un elemento contenedor alrededor de los elementos internos.
Mi pregunta es, ¿por qué es Fragment
preferible usar un ? ¿Ayuda con el rendimiento? Si es así, ¿por qué? Me encantaría alguna idea.
div
es que no siempre quieres un elemento contenedor. Los elementos de envoltura tienen un significado y, por lo general, necesita estilos adicionales para eliminar ese significado.<Fragment>
es solo azúcar sintáctico que no se procesa. Hay situaciones en las que crear un contenedor es muy difícil, por ejemplo, en SVG donde<div>
no se puede usar y<group>
no siempre es lo que desea.Respuestas:
div
s en el medio hace que sea difícil mantener el diseño deseado mientras se extraen los componentes lógicos.Puede encontrar las descripciones de algunos otros casos de uso en este problema de React: agregue un fragmento de API para permitir la devolución de múltiples componentes del render
fuente
<dt><dd>
mucho más fácil. Devolver elementos emparejados era incómodo antesFragments
.import Fragment from 'react'
. Pero no está definido en RN.number 2
, las tablas han sido en realidad el mayor problema para nosotros. La estructura necesaria detable>tr>td
(posiblemente conthead
y similar) creó un código de reacción incómodo.import {Fragment} from 'react'
? Es una exportación con nombre.Agregando a todas las respuestas arriba hay una ventaja más: la legibilidad del código ,
Fragment
soportes de componentes una forma de azúcar sintáctica,<>
. Por lo tanto, el código en su pregunta se puede escribir más fácilmente como:Según los documentos ,
Libre de desorden, ¿verdad?
Tenga en cuenta que aún necesita usar la
<Fragment>
sintaxis si necesita proporcionarkey
el fragmento.fuente
<Fragment>
Es tan simple como cuando no necesita un elemento envoltorio y no está obligado a usar uno. Tener menos elementos es excelente, pero creo que el mayor beneficio es poder representar elementos en jsx que antes no eran posibles y agregar un mejor significado semántico a los elementos envolventes porque ahora son opcionales.
Esto no era posible antes:
Echando un vistazo a lo siguiente en React 15, no puede saber si el elemento contenedor es necesario o no:
fuente
Según los documentos de reactjs.org, las necesidades más importantes en
<Fragment> </Fragment>
lugar de div son evitar romper la semántica HTML. Cuando usamos div's en lugar de<Fragment> </Fragment>
romper la semántica HTML.Para saber más sobre semántica html. Por favor, haga clic y también hay casos en que si se utiliza la div en lugar de fragmentos que será HTML no válido, por ejemplo vistazo a este código:
Los fragmentos resuelven este problema.
fuente
<React.Fragment>...</React.Fragment>
, podemos agregar una etiqueta principal a nuestros elementos JSX sin agregar un nodo adicional al DOM.<>...</>.
fuente