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 ref dalle prop, senza forwardRef.

La tabella delle sostituzioni

PrimaIn React 19Nota
forwardRefref come propforwardRef resta supportato, ma è deprecato nei componenti nuovi
isLoading manualeuseActionStateLo stato in attesa arriva dalla action
Aggiornamento ottimistico a manouseOptimisticIl rollback è automatico se la action fallisce
title e meta fuori da ReactMetadata nel documentoReact 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.