React
React 19: cosa cambia davvero
React 19 porta Actions, useActionState, useOptimistic, ref come prop e i metadata gestiti dal core. Cambia il data fetching, non il modo di scrivere i componenti.
In sintesi
- Le Actions spostano invio dei form e stato di attesa dentro React, senza gestire a mano ogni booleano di caricamento.
- ref è una prop normale: forwardRef resta valido ma non serve più nei componenti nuovi.
- L'aggiornamento richiede react e react-dom alla stessa versione e una verifica delle dipendenze che leggono le API rimosse.
“React 19” sposta il data fetching dentro la libreria: Actions, useActionState, useOptimistic, ref come prop e i metadata gestiti dal core.
Cosa entra nel core
- Actions: una funzione asincrona passata a un form riceve i dati inviati e aggiorna lo stato senza gestire a mano ogni booleano di caricamento.
- useActionState: restituisce stato, azione e valore in attesa in una sola chiamata.
- useOptimistic: mostra subito il risultato atteso e lo sostituisce quando il server risponde.
- ref come prop: i componenti funzione leggono
refdalle prop, senzaforwardRef.
La tabella delle sostituzioni
| Prima | In React 19 | Nota |
|---|---|---|
| forwardRef | ref come prop | forwardRef resta supportato, ma è deprecato nei componenti nuovi |
| isLoading manuale | useActionState | Lo stato in attesa arriva dalla action |
| Aggiornamento ottimistico a mano | useOptimistic | Il rollback è automatico se la action fallisce |
| title e meta fuori da React | Metadata nel documento | React sposta i tag nel head: React 19 li riconosce |
Come si aggiorna
npx codemod@latest react/19/migration-recipe
npm install react@19 react-dom@19
Il codemod è distribuito con licenza MIT e riscrive i pattern più comuni, da forwardRef a ref come prop e dagli propTypes rimossi. Dopo l'esecuzione leggi il diff: il codemod non conosce il tuo dominio e può toccare codice che funzionava. React e React DOM devono avere la stessa versione, altrimenti l'installazione fallisce.
Cosa si rompe
Alcune API sono state rimosse: propTypes e defaultProps sui componenti funzione, i ref sotto forma di stringa e ReactDOM.render. Gli errori lanciati durante il rendering non vengono più rilanciati: li intercetta il root. Le librerie che leggono queste API vanno aggiornate prima del deploy, non dopo.
Un record vivo
Nel catalogo EneUI due componenti mostrano il codice aggiornato: dropdown-menu e sonner, entrambi React con licenza MIT e senza forwardRef. Per esplorare per categoria parti da 111.985 componenti.
La limitazione
L'ecosistema non si aggiorna alla stessa velocità del core. Una libreria che dichiara React 18 nelle peer dependency può funzionare, ma il gestore di pacchetti segnala un conflitto e nessuno garantisce il comportamento. Serve un piano di ritorno: aggiorna in un branch, esegui i test e confronta i tempi di caricamento prima di unire.
Dove continuare
Le librerie React misurate nel catalogo sono in librerie React 2026; le librerie di form compatibili sono in librerie form React; il confronto con Vue è in Vue 3 vs React.
Domande frequenti
React 19 è una versione stabile?
Sì. React 19 è la release stabile pubblicata a dicembre 2024 e ha sostituito la 18 come versione corrente della documentazione.
Devo riscrivere i componenti classe?
No. Le classi restano supportate e non c'è una data di rimozione. La migrazione a componenti funzione è una scelta di manutenzione, non un requisito della 19.
Cosa sostituisce forwardRef?
Il passaggio di ref come prop normale. Il componente riceve ref fra le prop e la inoltra all'elemento. forwardRef continua a funzionare ed è deprecato solo per il codice nuovo.
Quale versione di Next.js serve per React 19?
Next.js 15 e le versioni successive supportano React 19. Le versioni precedenti dichiarano React 18 e non vanno forzate: il framework e la libreria devono restare allineati.
Posso aggiornare solo react-dom?
No. react e react-dom devono avere la stessa versione: il renderer e il core condividono strutture interne e una differenza di versione produce errori a runtime.