Skip to main content

Qu’est-ce que React ?

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.

JSX et TSX

Les composants React s’écrivent en JSX (JavaScript XML), une syntaxe proche du HTML directement intégrée à JavaScript.
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.
Le starter kit React de Laravel utilise TypeScript + TSX par défaut. Tous les exemples de cette page sont écrits en TSX.

Place de React dans Laravel

Historique

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).

Style dominant actuel : Inertia × React

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.

Mise en place

Via un starter kit (recommandé)

Pour un nouveau projet, le plus simple est de partir d’un starter kit.
En choisissant React dans le prompt interactif, tout est configuré automatiquement :
  • inertiajs/inertia-laravel (adaptateur serveur)
  • @inertiajs/react (adaptateur client)
  • react + react-dom (React 19)
  • @vitejs/plugin-react (plugin Vite)
  • TypeScript + @types/react
  • Tailwind CSS + shadcn/ui
  • Middleware HandleInertiaRequests
  • Écrans d’authentification (login, register, etc.) déjà implémentés en Inertia + React + TypeScript

Installation manuelle

Pour un projet existant, installez côté serveur et côté client séparément.
Ajoutez ensuite le plugin React à vite.config.ts.
Démarrez l’application Inertia dans resources/js/app.tsx.
Pour les détails d’une installation manuelle (template racine, enregistrement du middleware, etc.), consultez la documentation officielle Inertia.

Structure des répertoires

Dans le starter kit, les composants de page React se trouvent dans resources/js/pages/.
Inertia::render('posts/index', [...]) correspond au composant resources/js/pages/posts/index.tsx.

Bases de la syntaxe JSX

React utilise JSX : une syntaxe façon HTML au sein de JavaScript. Voici les patrons minimaux à connaître pour lire le code des starter kits.

{} — interpolation de variable

Dans JSX, {} permet d’injecter une valeur ou une expression JavaScript.

Branchement — && et opérateur ternaire

React n’a pas d’équivalent de v-if. Pour un simple test, utilisez &&. Pour un if/else, l’opérateur ternaire ? :.

Rendu de liste — .map()

Utilisez Array.map() pour rendre une liste. Précisez toujours la prop key pour un diff efficace.
C’est l’équivalent du v-for :key de Vue et du {#each} de Svelte.

className — nom de classe CSS

JSX étant compilé en JavaScript, class est un mot-clé réservé. Pour les classes CSS, utilisez className.

Handlers d’événements — camelCase

Les attributs d’événements JSX sont en camelCase et reçoivent une référence de fonction.

Composant de page — bases

Un composant de page Inertia est un composant React classique. Les données passées depuis le contrôleur Laravel arrivent en props.

Contrôleur

Composant de page React

Il suffit de recevoir les props en argument du composant pour utiliser les données transmises par le contrôleur. Aucune API REST à définir.
Le composant <Link> fourni par @inertiajs/react déclenche la navigation en XHR, évitant le rechargement complet du navigateur.
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.

Composant Form

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).

Utilisation de base

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.

Patron des starter kits

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>.
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.

Hook useForm

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.

Côté contrôleur

Composant de formulaire React

Principales propriétés retournées par useForm. En cas d’erreur de validation, useForm conserve les valeurs saisies tout en affichant les erreurs.

Données partagées (Shared Data)

Les données communes à toutes les pages (utilisateur connecté, messages flash) sont déclarées dans la méthode share() du middleware HandleInertiaRequests.
Depuis un composant React, accédez aux données partagées via le hook usePage().
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.

Bases des hooks React

Voici les hooks essentiels pour développer avec Inertia × React.

useState — état local

useEffect — effets de bord

useMemo et useCallback — optimisation de performance


Support TypeScript

Le starter kit React utilise TypeScript par défaut. Combiné aux types Inertia, il assure la sûreté des props.

Types globaux

Le starter kit définit le type des données partagées dans resources/js/types/index.d.ts.

Utilisation du type dans un composant de page


Conclusion

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. 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.
Dernière modification le 13 juillet 2026