React
React Compiler: cosa cambia nel codice
React Compiler aggiunge la memoizzazione in fase di build: il codice perde useMemo e useCallback, ma deve rispettare le regole degli hook.
In sintesi
- Il compilatore legge il codice e inserisce la memoizzazione che prima si scriveva a mano.
- Funziona solo su componenti che rispettano le regole degli hook: le violazioni diventano bailout silenziosi.
- Non corregge uno stato mal posizionato: quello resta un problema di struttura.
React Compiler non cambia ciò che scrivi: legge i componenti in fase di build e inserisce la memoizzazione che prima aggiungevi a mano con useMemo e useCallback.
Cosa sparisce dal codice
La memoizzazione manuale era una difesa: senza, ogni render ricostruiva array, oggetti e callback, e i figli memoizzati si rirenderizzavano lo stesso. Il compilatore fa lo stesso lavoro con una condizione in più, cioè che il componente sia puro abbastanza da poterlo analizzare.
// prima: memoizzazione scritta a mano
const rows = useMemo(() => sortRows(data), [data]);
// dopo: il compilatore inserisce la stessa memoizzazione
const rows = sortRows(data);
Cosa serve perché funzioni
- Regole degli hook: niente hook condizionali o dentro cicli, altrimenti il componente viene saltato.
- Componenti puri: mutare una prop o una variabile esterna durante il render blocca l'ottimizzazione.
- Lint attivo:
eslint-plugin-react-hookssegnala le violazioni che il compilatore tratta come bailout.
Installazione
npm i -D babel-plugin-react-compiler
npx react-compiler-healthcheck
Il plugin è distribuito con licenza MIT. react-compiler-healthcheck analizza il progetto e stampa quanti componenti compilano: è il numero da guardare prima di togliere le memoizzazioni a mano.
Cosa non cambia
Il compilatore non riduce il numero di render, evita solo il lavoro inutile dentro un render. Se un componente si rirenderizza perché lo stato è nel posto sbagliato, il costo resta: là serve spostare lo stato, non aggiungere una libreria.
Record vivi nel catalogo
Tre componenti con liste e tabelle, dove la memoizzazione si sente: lumina-interactive-list, interactive-logs-table e ruixen-contributors-table. Per esplorare per categoria parti da 111.985 componenti.
La limitazione
I bailout sono silenziosi: un componente saltato compila senza errori e senza guadagno, e l'unico segnale è il conteggio del healthcheck. Inoltre il codice ottimizzato è più difficile da leggere nel debug, perché le dipendenze calcolate non compaiono nel sorgente.
Dove continuare
Le novità della versione 19 sono in React 19; gli errori di key che rompono la memoizzazione sono in key warning nelle liste; il confronto misurato fra librerie è in librerie React 2026.
Domande frequenti
Devo togliere tutti i useMemo?
Solo dopo il healthcheck e con il compilatore attivo. Se un componente viene saltato, la memoizzazione manuale resta necessaria.
Il compilatore funziona con Next.js?
Sì, tramite il plugin Babel o la configurazione del bundler. La versione di Next e quella del plugin vanno tenute allineate.
Riduce i render di React?
No. Evita il lavoro inutile dentro un render e le prop che cambiano identità a ogni giro; il numero di render dipende dallo stato.
Cosa succede a un componente che viola le regole?
Viene saltato senza errore. Il codice continua a funzionare come prima dell'attivazione, ma senza ottimizzazione.
React Compiler è open source?
Sì, è distribuito con licenza MIT insieme al plugin Babel e agli strumenti di analisi.