Skip to Content
Le documentazioni sono in costruzione, puoi utilizzare la navigazione sulla sinistra come roadmap per monitorare i tuoi progressi. Grazie!
04 JSXFragment

Fragment

In React, un Fragment è un costrutto che permette di raggruppare più elementi JSX senza aggiungere nodi extra al DOM. È una soluzione elegante e fondamentale per mantenere il markup pulito, semantico e performante.

In JSX, ogni componente deve restituire un unico elemento padre. Quando non si vuole introdurre un <div> o un altro contenitore solo per soddisfare questa regola, entrano in gioco i Fragment.


Perché usare i Fragment

Senza Fragment, spesso si finisce per aggiungere wrapper inutili:

return ( <div> <h1>Titolo</h1> <p>Testo</p> </div> );

Questo <div> potrebbe non avere alcun significato semantico o stilistico, ma esisterà comunque nel DOM.

Con i Fragment, il codice diventa:

return ( <> <h1>Titolo</h1> <p>Testo</p> </> );

Nel DOM finale, React renderizzerà solo <h1> e <p>, senza alcun contenitore aggiuntivo.

I principali vantaggi sono:

  • DOM più pulito
  • Migliore semantica HTML
  • Minore impatto su layout e CSS
  • Codice più leggibile

Sintassi dei Fragment

React offre due modi per usare i Fragment.

Fragment esplicito

import React from "react"; return ( <React.Fragment> <h1>Titolo</h1> <p>Testo</p> </React.Fragment> );

Questa forma è sempre valida ed è necessaria quando si devono usare attributi sul Fragment (ad esempio key).


Fragment abbreviato (shorthand)

return ( <> <h1>Titolo</h1> <p>Testo</p> </> );

È la sintassi più usata perché più concisa. Tuttavia, non supporta attributi.


Fragment e liste

Quando si renderizzano liste, React richiede una key per ogni elemento. In questi casi, il Fragment è spesso la scelta ideale.

Esempio senza Fragment:

return items.map((item) => ( <div key={item.id}> <h2>{item.title}</h2> <p>{item.description}</p> </div> ));

Se il <div> non è semanticamente necessario, si può usare un Fragment con key:

return items.map((item) => ( <React.Fragment key={item.id}> <h2>{item.title}</h2> <p>{item.description}</p> </React.Fragment> ));

Nota importante: in questo caso non è possibile usare la sintassi abbreviata, perché la key è un attributo.


Fragment e componenti

I Fragment sono particolarmente utili nei componenti riutilizzabili:

function CardContent() { return ( <> <h3>Titolo card</h3> <p>Contenuto della card</p> </> ); }

Il componente può essere inserito ovunque senza forzare un wrapper che potrebbe interferire con il layout del componente padre.


Differenza tra Fragment e elementi HTML

Un Fragment:

  • Non genera nodi nel DOM
  • Non può avere stili CSS
  • Non può avere eventi
  • Serve solo a livello di JSX

Un elemento HTML (come div, section, article):

  • Esiste nel DOM
  • Può essere stilizzato
  • Ha significato semantico
  • Può ricevere eventi

La scelta tra Fragment e un elemento HTML deve essere intenzionale: se il contenitore ha un ruolo strutturale o semantico, va usato un elemento HTML. Se serve solo a raggruppare JSX, va usato un Fragment.


Limitazioni dei Fragment

I Fragment hanno alcune limitazioni da conoscere:

  • Non possono ricevere classi CSS o stili
  • Non possono gestire eventi
  • La sintassi abbreviata non supporta attributi
  • Non possono essere selezionati nel DOM

Queste limitazioni sono volute e coerenti con il loro scopo.


Buone pratiche

  • Usa i Fragment per evitare wrapper inutili
  • Preferisci la sintassi abbreviata <>...</> quando non servono attributi
  • Usa React.Fragment quando hai bisogno della key
  • Non abusare dei Fragment se un contenitore HTML ha valore semantico
  • Mantieni il JSX leggibile: i Fragment migliorano la struttura, non devono confonderla

Conclusione

I Fragment sono uno strumento essenziale nello sviluppo con React. Permettono di scrivere JSX più pulito, semantico e flessibile, evitando nodi superflui nel DOM. Comprenderne l’uso corretto è fondamentale sia per chi inizia sia per sviluppatori esperti che vogliono mantenere codice di qualità, scalabile e facilmente manutenibile.

Aggiornato il