React 19.3 è uscito il 9 settembre 2026. La maggior parte degli articoli di rilascio sembra un elenco di funzionalità; io la leggo come una lista di codice che posso togliere. Rispetto a React 18, ancora presente in molte applicazioni di produzione, la serie 19 riguarda meno la nuova sintassi e più l’eliminazione delle soluzioni alternative scritte da ogni team: macchine a stati per i form, wrapper di forwardRef, memo ovunque e controlli typeof window.
React 19.0 ha gettato le basi. Actions e useActionState hanno sostituito il trio artigianale isPending / error / data in ogni form. useOptimistic ha reso l’interfaccia ottimistica un hook invece di un reducer. use() legge una promise o un context durante il render, anche in modo condizionale. ref è diventato una prop normale, quindi forwardRef è legacy; <Context> può fungere da provider; <title> e <meta> vengono spostati in head da qualsiasi componente. Il cambiamento ha avuto un costo: string refs, legacy context, ReactDOM.render e propTypes nei componenti funzione sono scomparsi. Un’app React 18 con dipendenze vecchie ha quindi bisogno di un vero aggiornamento, non di un semplice aumento di versione.
React 19.2 e React Compiler 1.0 hanno cambiato l’esperienza di sviluppo. <Activity mode="hidden"> mantiene montata una scheda o la pagina successiva con il suo stato, mentre sospende gli effetti: ciò che prima simulavamo con display: none e un po’ di speranza. useEffectEvent chiude la disputa con la regola exhaustive-deps: l’effetto reagisce a roomId, il callback legge semplicemente il tema più recente. Il pre-rendering parziale (prerender, poi resume) permette di distribuire uno shell statico dalla CDN mentre la parte dinamica arriva in streaming. Il Compiler ha reso inoltre superflua la maggior parte delle chiamate manuali a useMemo, useCallback e React.memo. Le conservo quando una libreria ha bisogno di identità referenziale, ma non sono più un riflesso automatico.
React 19.3 riguarda le transizioni e i confini del DOM. <ViewTransition> ora è stabile: si avvolge un elemento, si marca l’aggiornamento con startTransition e il browser anima entrate, uscite ed elementi condivisi. addTransitionType permette a «next» e «previous» di scorrere in direzioni diverse a partire dallo stesso aggiornamento di stato. Le Fragment refs forniscono focus(), observeUsing() per IntersectionObserver e misurazioni di un gruppo di elementi fratelli senza un div wrapper aggiuntivo. use(browser()) di react-dom sostituisce il controllo typeof window !== "undefined": il componente sospende sul server, mostra il fallback Suspense e viene renderizzato sul client dopo l’hydration. I Server Components possono renderizzare <Context value> direttamente, senza un file provider «use client»; inoltre react-dom passa gli oggetti Trusted Types senza convertirli in stringhe, quindi React funziona con una CSP rigorosa e require-trusted-types-for.
La differenza emerge dagli import. In React 18, un form con stato di attesa, aggiornamento ottimistico ed elenco animato significava tre librerie e un hook personalizzato; in 19.3 bastano useActionState, useOptimistic e <ViewTransition>, tutti forniti da React. In 18, «renderizzare solo sul client» voleva dire un flag mounted e uno spostamento del layout; oggi bastano una riga e un confine Suspense. In 18 le prestazioni richiedevano disciplina nell’uso di memo; ora il Compiler e React Performance Tracks in Chrome DevTools mostrano che cosa ha davvero bloccato un frame.
Non passerei da 18 a 19.3 con un solo pull request su un prodotto che gestisce denaro. Il mio percorso è volutamente noioso: prima 18.3 per far emergere gli avvisi di deprecazione, poi 19 con i codemod ufficiali, quindi il Compiler su una route dietro un flag, infine le nuove API solo dove eliminano codice. 19.3 è additivo e l’annuncio non elenca breaking changes; gli avvisi di sicurezza sui Server Components del dicembre 2025 ricordano però che le versioni patch contano quanto le major. Se la tua app è ancora alla 18, mandami package.json e le tre schermate più importanti. Ti indicherò l’ordine di aggiornamento e il codice che potrai rimuovere.
Dai al prossimo prodotto qualcuno che resti.
Pronto a iniziare? Scrivimi: posso cominciare subito e restare. Collaborazioni a lungo termine, non passaggi di consegne dopo due settimane. Parliamo del progetto, dei requisiti e del modo migliore per procedere.