No React 16.2, Fragments
foi adicionado suporte aprimorado para . Mais informações podem ser encontradas no post do React aqui.
Todos conhecemos o seguinte código:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Sim, precisamos de uma div de contêiner, mas não é grande coisa.
No React 16.2, podemos fazer isso para evitar a div do contêiner ao redor:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
Nos dois casos, ainda precisamos de um elemento contêiner cercando os elementos internos.
Minha pergunta é: por que usar um Fragment
preferível? Isso ajuda com o desempenho? Se sim, por quê? Amaria alguma introspecção.
div
é que nem sempre você deseja um elemento wrapper. Os elementos do wrapper têm um significado e geralmente você precisa de estilos adicionais para que esse significado seja removido.<Fragment>
é apenas açúcar sintático que não é processado. Há situações em que a criação de um wrapper é muito difícil, por exemplo, no SVG, onde<div>
não pode ser usado e<group>
nem sempre é o que você deseja.Respostas:
div
s no meio dificulta a manutenção do layout desejado ao extrair componentes lógicos.Você pode encontrar as descrições de alguns outros casos de uso neste problema do React: Adicione API de fragmento para permitir o retorno de vários componentes da renderização
fonte
<dt><dd>
fica muito mais fácil. Retornar elementos emparelhados era estranho antesFragments
.import Fragment from 'react'
. Mas é indefinido no RN.number 2
, as mesas têm sido o maior problema para nós. A estrutura necessáriatable>tr>td
(possivelmente comthead
e similar) resultou em algum código React estranho.import {Fragment} from 'react'
? é uma exportação nomeada.Adicionando a todas as respostas acima, há mais uma vantagem: legibilidade do código , o
Fragment
componente suporta uma forma sintática de açúcar<>
,. Assim, o código na sua pergunta pode ser escrito mais facilmente como:De acordo com documentos ,
Livre de desordem, certo?
Observe que você ainda precisará usar a
<Fragment>
sintaxe se precisar fornecerkey
ao fragmento.fonte
<Fragment>
Tão simples quanto quando você não precisa de um elemento wrapper, não é obrigado a usá-lo. Ter menos elementos é ótimo, mas acho que o maior benefício é poder renderizar elementos em jsx que não eram possíveis anteriormente e adicionar melhor significado semântico aos elementos do wrapper, porque agora são opcionais.
Isso não era possível antes:
Olhando para o seguinte no React 15, você não pode dizer se o elemento wrapper é necessário ou não:
fonte
De acordo com os documentos do reactjs.org, as necessidades mais importantes, em
<Fragment> </Fragment>
vez das divs , são evitar a quebra da semântica do HTML. Quando usamos div em vez de<Fragment> </Fragment>
quebrar a semântica do HTML.Para saber mais sobre semântica html. por favor clique e também há casos em que se usam div é em vez de fragmentos Será html inválido, por exemplo olhada neste código:
Fragmentos resolvem esse problema.
fonte
<React.Fragment>...</React.Fragment>
, podemos adicionar uma tag pai aos nossos elementos JSX sem adicionar um nó extra ao DOM.<>...</>.
fonte