Skip to content

React Fragment (<></>)

O React Fragment é uma funcionalidade nativa do React que permite agrupar múltiplos elementos filhos sem adicionar um nó extra ao DOM (na Web) ou à árvore de componentes (no Mobile).


1. Por que usar?

No React, todo componente deve retornar um único elemento raiz. Muitas vezes, para cumprir essa regra, acabamos adicionando divs ou Views desnecessárias, o que pode causar:

  • Poluição do DOM: Árvores HTML excessivamente profundas.
  • Problemas de Layout: CSS Flexbox ou Grid podem ser quebrados por elementos intermediários indesejados.
  • Performance: Processamento extra para renderizar elementos que não têm função visual.

O Fragment resolve isso permitindo o agrupamento "invisível".


2. Sintaxe

Existem duas formas de declarar um Fragment:

A. Sintaxe Curta (<></>)

É a forma mais comum e recomendada para a maioria dos casos.

tsx
function MyComponent() {
  return (
    <>
      <Title />
      <Description />
    </>
  );
}

B. Sintaxe Explícita (<React.Fragment>)

Necessária apenas quando você precisa passar a propriedade key (geralmente dentro de loops).

tsx
function List({ items }) {
  return (
    <div>
      {items.map(item => (
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </div>
  );
}

3. Quando usar vs Quando não usar

✅ Quando usar

  • Para agrupar elementos irmãos no retorno de um componente.
  • Dentro de loops onde você não quer adicionar um container extra mas precisa de uma key.
  • Para retornar múltiplos elementos de um componente que será injetado em um layout Flex/Grid.

❌ Quando não usar

  • Estilização: Se você precisa de margin, padding, background ou qualquer estilo, use uma View (ou Stack/Box do Design System). Fragments não aceitam estilos.
  • Acessibilidade: Se o agrupamento tem um significado semântico (ex: uma lista, um artigo), use a tag HTML correta (ul, article, section) em vez de um Fragment.

4. Comparação Visual

❌ Como não fazer (Poluindo o DOM)

tsx
function BadLayout() {
  return (
    <div className="flex-container">
      {/* Esta div extra quebra o flex-direction do pai */}
      <div className="wrapper">
        <ItemA />
        <ItemB />
      </div>
    </div>
  );
}

✅ Como fazer (Limpo e Performático)

tsx
function GoodLayout() {
  return (
    <div className="flex-container">
      <>
        <ItemA />
        <ItemB />
      </>
    </div>
  );
}

5. Regra de Ouro

Sempre prefira o uso de Fragments em vez de containers genéricos (div, View) se a única finalidade for agrupar elementos para o retorno do React. Isso mantém a árvore de renderização leve e o layout previsível.