Skip to main content

Cos’è React

React è una libreria JavaScript per costruire interfacce utente, sviluppata e mantenuta da Meta (ex Facebook). È caratterizzata da una descrizione dichiarativa della UI e da un’architettura basata sui componenti, e viene usata da piccoli widget a intere SPA. Il cuore di React è il DOM virtuale, che consente re-render efficienti. Quando lo state cambia, React riflette nel DOM solo le differenze, senza che sia necessario manipolarlo manualmente.
In questa pagina spieghiamo la combinazione di React 19 e Inertia v3. Lo starter kit di Laravel 13 usa questa configurazione per impostazione predefinita.

JSX e TSX

I componenti React si scrivono con la sintassi JSX (JavaScript XML). Puoi scrivere direttamente dentro JavaScript una notazione simile all’HTML.
Negli starter kit è adottato di default TypeScript (.tsx). Le definizioni di tipo rafforzano il completamento dell’IDE e ti fanno trovare i bug in anticipo.
Lo starter kit React di Laravel usa TypeScript + TSX come standard. Anche gli esempi di questa pagina sono tutti in TSX.

Posizione in Laravel

Storia

Il rapporto tra React e Laravel è un po’ più recente rispetto a Vue, ma oggi è del tutto paragonabile. Con Laravel 6 (2019) lo scaffold di autenticazione è stato scorporato nel pacchetto laravel/ui e sono stati offerti scaffold sia per Vue sia per React. All’epoca però Vue era dominante e la presenza di React era limitata. Con l’aggiunta dello stack Inertia + React a Laravel Breeze (2021) è iniziata un’adozione seria; con il rinnovo degli starter kit di Laravel 12 (2025) React è stato trattato completamente allo stesso livello di Vue (anzi, viene mostrato per primo).

Stile principale attuale: Inertia × React

Il modo principale di usare React in Laravel oggi è Inertia × React. Inertia realizza un’architettura “monolite moderno” in cui puoi passare dati dai controller Laravel direttamente ai componenti React senza progettare un’API.

Setup

Tramite starter kit (consigliato)

Per iniziare un nuovo progetto, il modo più semplice è usare lo starter kit.
Se scegli React nel prompt interattivo, viene tutto configurato automaticamente.
  • inertiajs/inertia-laravel (adapter lato server)
  • @inertiajs/react (adapter lato client)
  • react + react-dom (React 19)
  • @vitejs/plugin-react (plugin Vite)
  • TypeScript + @types/react
  • Tailwind CSS + libreria di componenti shadcn/ui
  • Middleware HandleInertiaRequests
  • Schermate di autenticazione (login, registrazione, ecc.) già implementate con Inertia + React + TypeScript

Installazione manuale

Se vuoi aggiungerlo a un progetto esistente, installa separatamente lato server e lato client.
Aggiungi poi il plugin React in vite.config.ts.
Avvia l’app Inertia in resources/js/app.tsx.
Per i dettagli dell’installazione manuale (configurazione del template root, registrazione dei middleware, ecc.) consulta la documentazione ufficiale di Inertia.

Struttura delle directory

Negli starter kit i componenti pagina React vanno nella directory resources/js/pages/.
Scrivendo Inertia::render('posts/index', [...]), il componente corrispondente è resources/js/pages/posts/index.tsx.

Basi della sintassi JSX

React usa JSX. Ecco i pattern minimi da conoscere per leggere il codice degli starter kit, uno stile in cui si scrive sintassi simile all’HTML dentro JavaScript.

{} — espansione di variabile

In JSX si usa {} per incorporare valori o espressioni JavaScript.

Condizionali — && e operatore ternario

React non ha una direttiva equivalente a v-if. Per condizioni semplici si usa l’operatore &&, per if/else l’operatore ternario ? :.

Rendering di liste — .map()

Per il rendering di liste si usa Array.map(). Specifica sempre la prop key per un aggiornamento differenziale efficiente.
Corrisponde a v-for :key di Vue e a {#each} di Svelte.

className — nome della classe CSS

Poiché JSX viene compilato in JavaScript, class è una parola riservata. Per le classi CSS si usa className.

Gestori di eventi — camelCase

Gli attributi evento in JSX sono in camelCase e ricevono un riferimento a una funzione.

Le basi del componente pagina

I componenti pagina di Inertia sono normali componenti React. I dati passati dal controller Laravel vengono ricevuti come props.

Controller

Componente pagina React

Ricevendo le props come argomento del componente, puoi usare direttamente i dati passati dal controller. Non serve definire un’API REST.
Usando il componente <Link> di @inertiajs/react, le transizioni di pagina avvengono via XHR ed eviti il full reload del browser.
Si scrive esattamente come un normale tag <a>, ma dietro le quinte Inertia sostituisce solo il componente di pagina, dando una sensazione da SPA.

Componente Form

Il componente <Form> fornito da @inertiajs/react è lo stile consigliato per l’invio dei form, usato nelle schermate di autenticazione degli starter kit. Specifichi action e method come props e ricevi errors e processing tramite una funzione children (render prop).

Uso di base

Il children di <Form> è una funzione ({ errors, processing }) => JSX (pattern render prop). Il componente Form calcola e passa automaticamente questi valori. Ai campi del form si assegna l’attributo nativo HTML name invece di un handler onChange, così la raccolta standard dei dati del browser funziona.

Pattern degli starter kit

Gli starter kit gestiscono le rotte come oggetti tramite Wayfinder. store.form() restituisce un oggetto che contiene action e method dell’oggetto rotta e lo si passa a <Form> con lo spread.
I campi specificati in resetOnSuccess vengono ripristinati automaticamente in caso di invio riuscito. Impostalo per campi come la password che vuoi svuotare dopo l’invio.
Se non usi Wayfinder puoi passare direttamente l’URL come action="/login" e funziona allo stesso modo.

Hook useForm

Per la gestione dei form si usa l’hook useForm di @inertiajs/react. Puoi implementare in modo semplice gestione dello stato, invio e visualizzazione degli errori di validazione.

Lato controller

Componente form React

Ecco le principali proprietà restituite da useForm. Quando arrivano errori di validazione, useForm mostra gli errori mantenendo i contenuti inseriti.

Dati condivisi (Shared Data)

I dati necessari a tutte le pagine (utente loggato, messaggi flash, ecc.) si definiscono nel metodo share() del middleware HandleInertiaRequests.
Per accedere ai dati condivisi da un componente React, usa l’hook usePage().
Poiché i dati condivisi sono inclusi in ogni richiesta, si consiglia di limitarli allo stretto necessario. Usando valutazioni lazy con fn(), vengono valutati solo quando ci si accede davvero.

Basi degli hook React

Ecco gli hook React essenziali per sviluppare con Inertia × React.

useState — gestione dello stato locale

useEffect — gestione degli effetti collaterali

useMemo e useCallback — ottimizzazione delle prestazioni


Supporto TypeScript

Lo starter kit React usa TypeScript di default. Combinandolo con le definizioni di tipo di Inertia puoi garantire la type-safety delle prop.

Definizioni di tipo globali

Negli starter kit i tipi dei dati condivisi si definiscono in resources/js/types/index.d.ts.

Uso dei tipi nel componente pagina


Conclusioni

React dà il meglio in combinazione con Laravel, in particolare nella configurazione “monolite moderno” tramite Inertia. È anche molto compatibile con TypeScript e adatto allo sviluppo di applicazioni di grandi dimensioni. Usando Inertia × React ottieni un’esperienza di sviluppo che combina la semplicità del backend Laravel con il potente ecosistema di React. Creando il progetto tramite starter kit, puoi iniziare subito con schermate di autenticazione incluse.

Documentazione ufficiale di Inertia.js

Per tutte le funzionalità di Inertia v3 consulta la documentazione ufficiale.
Ultima modifica il 13 luglio 2026