Introduction à React — bases pour l'utiliser avec Inertia × Laravel
Guide d’introduction à React avec Laravel + Inertia.js. Historique de laravel/ui jusqu’aux starter kits actuels et explication pratique des hooks React d’Inertia comme useForm ou usePage.
React est une bibliothèque JavaScript développée et maintenue par Meta (ex-Facebook) pour construire des interfaces utilisateur. Elle se caractérise par une écriture d’UI déclarative et une architecture basée sur des composants, utilisée aussi bien pour de petits widgets que pour des SPA complètes.Le cœur de React est le rendu efficace via un DOM virtuel. Quand l’état (state) change, React applique uniquement le diff au DOM, sans que vous manipuliez le DOM manuellement.
Cette page traite de React 19 combiné à Inertia v3. Les starter kits Laravel 13 utilisent cette configuration par défaut.
Les composants React s’écrivent en JSX (JavaScript XML), une syntaxe proche du HTML directement intégrée à JavaScript.
// Exemple JSXfunction Greeting({ name }) { return <h1>Bonjour {name}</h1>}
Les starter kits utilisent TypeScript (.tsx) par défaut. Les définitions de types renforcent la complétion IDE et permettent de détecter les bugs plus tôt.
// Exemple TSX (TypeScript)type Props = { name: string}function Greeting({ name }: Props) { return <h1>Bonjour {name}</h1>}
Le starter kit React de Laravel utilise TypeScript + TSX par défaut. Tous les exemples de cette page sont écrits en TSX.
React est arrivé un peu plus tard que Vue dans l’histoire de Laravel, mais il est aujourd’hui à parité ou davantage.Avec Laravel 6 (2019), le scaffold d’authentification est extrait dans le package laravel/ui et une version React est proposée en même temps que Vue. À l’époque, Vue reste dominant et React est en retrait.Avec Laravel Breeze (2021), la stack Inertia + React est ajoutée, ce qui marque le vrai début de son adoption. La refonte des starter kits de Laravel 12 (2025) met React totalement à égalité avec Vue (voire en tête dans l’affichage).
Aujourd’hui, l’usage principal de React avec Laravel se fait via Inertia × React. Inertia réalise une architecture « monolithe moderne » où l’on passe directement des données du contrôleur Laravel à un composant React, sans concevoir d’API.
Le composant <Link> fourni par @inertiajs/react déclenche la navigation en XHR, évitant le rechargement complet du navigateur.
import { Link } from '@inertiajs/react'export default function PostsIndex() { return ( <div> {/* Lien de base */} <Link href="/posts">Liste des articles</Link> {/* Lien POST (suppression, etc.) */} <Link href="/posts/1" method="delete" as="button"> Supprimer </Link> {/* Préchargement (préfetch au survol) */} <Link href="/posts/1" preload> Voir l'article </Link> </div> )}
L’écriture est identique à celle d’une balise <a> classique, mais Inertia remplace uniquement le composant de page, offrant une expérience de type SPA.
Le composant <Form> de @inertiajs/react est le style recommandé d’envoi de formulaire utilisé dans les écrans d’authentification des starter kits. On passe action et method en props et on récupère errors et processing via une fonction children (render prop).
Le children de <Form> est une fonction ({ errors, processing }) => JSX (render prop). Le composant Form calcule et injecte ces valeurs. Les champs utilisent l’attribut natif name plutôt qu’un onChange, ce qui active la collecte standard des données de formulaire par le navigateur.
Les starter kits utilisent Wayfinder pour gérer les routes en tant qu’objets. store.form() renvoie un objet contenant action et method que l’on spread dans <Form>.
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 }) => ( <> {/* Contenu du formulaire */} </> )} </Form> )}
Les champs listés dans resetOnSuccess sont automatiquement réinitialisés après un envoi réussi. Utilisez-le pour les champs comme le mot de passe qu’il faut vider.
Sans Wayfinder, passer directement une URL (action="/login") fonctionne de la même façon.
Pour la gestion de formulaire, utilisez le hook useForm de @inertiajs/react. Il simplifie la gestion d’état, l’envoi et l’affichage des erreurs de validation.
Les données communes à toutes les pages (utilisateur connecté, messages flash) sont déclarées dans la méthode share() du middleware HandleInertiaRequests.
Ces données étant présentes à chaque requête, limitez-les au strict nécessaire. Une évaluation paresseuse avec fn() ne les calcule qu’en cas d’accès effectif.
React s’exprime particulièrement bien avec Laravel dans un « monolithe moderne » via Inertia. La bonne intégration avec TypeScript le rend adapté aux applications de grande taille.
Élément
Rôle
Contrôleur Laravel
Routage, récupération de données, validation
Inertia::render()
Transmet les données du contrôleur au composant React
Composant de page React
Reçoit les props et rend l’UI
useForm
Gestion d’état, envoi et erreurs de formulaire
Composant Link
Navigation sans rechargement complet
usePage().props
Accès aux données partagées
TypeScript
Sûreté des props et meilleure complétion IDE
Utiliser Inertia × React combine la simplicité du backend Laravel à la puissance de l’écosystème React. En partant du starter kit, vous pouvez démarrer le développement immédiatement, écrans d’authentification inclus.
Documentation officielle Inertia.js
Retrouvez toutes les fonctionnalités d’Inertia v3 dans la documentation officielle.