Introduzione a React — le basi per usarlo con Inertia × Laravel
Guida introduttiva all’uso di React con Laravel + Inertia.js. Ripercorre la storia da laravel/ui allo starter kit attuale e spiega in modo pratico gli hook React di Inertia come useForm e usePage.
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.
I componenti React si scrivono con la sintassi JSX (JavaScript XML). Puoi scrivere direttamente dentro JavaScript una notazione simile all’HTML.
// Esempio di JSXfunction Greeting({ name }) { return <h1>Ciao, {name}</h1>}
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.
// Esempio TSX (TypeScript)type Props = { name: string}function Greeting({ name }: Props) { return <h1>Ciao, {name}</h1>}
Lo starter kit React di Laravel usa TypeScript + TSX come standard. Anche gli esempi di questa pagina sono tutti in TSX.
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).
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.
import { defineConfig } from 'vite'import laravel from 'laravel-vite-plugin'import react from '@vitejs/plugin-react'export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.tsx'], refresh: true, }), react(), ],})
Avvia l’app Inertia in resources/js/app.tsx.
import { createInertiaApp } from '@inertiajs/react'import { createRoot } from 'react-dom/client'import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'createInertiaApp({ resolve: (name) => resolvePageComponent( `./pages/${name}.tsx`, import.meta.glob('./pages/**/*.tsx'), ), setup({ el, App, props }) { createRoot(el).render(<App {...props} />) },})
Per i dettagli dell’installazione manuale (configurazione del template root, registrazione dei middleware, ecc.) consulta la documentazione ufficiale di Inertia.
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.
React non ha una direttiva equivalente a v-if. Per condizioni semplici si usa l’operatore &&, per if/else l’operatore ternario ? :.
{/* Mostra solo se la condizione è true */}{isLoggedIn && <p>Benvenuto!</p>}{/* if / else */}{isLoggedIn ? <p>Benvenuto!</p> : <a href="/login">Login</a>}{/* if / else if / else */}{isLoggedIn ? <p>Benvenuto!</p> : role === 'admin' ? <p>Loggato come amministratore</p> : <a href="/login">Login</a>}
Usando il componente <Link> di @inertiajs/react, le transizioni di pagina avvengono via XHR ed eviti il full reload del browser.
import { Link } from '@inertiajs/react'export default function PostsIndex() { return ( <div> {/* Link di base */} <Link href="/posts">Elenco post</Link> {/* Link con metodo POST (ad es. per l'eliminazione) */} <Link href="/posts/1" method="delete" as="button"> Elimina </Link> {/* Preload (fetch anticipato all'hover) */} <Link href="/posts/1" preload> Vedi il post </Link> </div> )}
Si scrive esattamente come un normale tag <a>, ma dietro le quinte Inertia sostituisce solo il componente di pagina, dando una sensazione da SPA.
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).
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.
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.
import { Form } from '@inertiajs/react'import { store } from '@/routes/login'export default function Login() { return ( <Form {...store.form()} resetOnSuccess={['password']} className="flex flex-col gap-6" > {({ errors, processing }) => ( <> {/* Contenuto del form */} </> )} </Form> )}
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.
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.
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.
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.
Elemento
Ruolo
Controller Laravel
Routing, recupero dati e validazione
Inertia::render()
Passa i dati dal controller al componente React
Componente pagina React
Riceve le prop e renderizza la UI
useForm
Gestione stato, invio ed errori del form
Componente Link
Transizioni di pagina senza full reload
usePage().props
Accesso ai dati condivisi
TypeScript
Type-safety delle prop e completamento IDE potenziato
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.