Skip to main content

Qu’est-ce que Vue.js ?

Vue.js (ci-après Vue) est un framework JavaScript progressif pour construire des interfaces utilisateur. « Progressif » signifie que vous pouvez commencer petit et ajouter des fonctionnalités selon vos besoins ; il peut s’intégrer partiellement dans une page HTML existante ou servir à la construction de SPA à grande échelle. L’essence de Vue est la réactivité. Lorsque les données changent, le DOM est automatiquement mis à jour ; le développeur n’a donc pas à gérer manuellement « quand et quels éléments mettre à jour ».
Cette page présente la combinaison Vue 3 et Inertia v3. Le starter kit de Laravel 13 utilise cette configuration par défaut.

Options API et Composition API

Vue 3 propose deux styles d’écriture de composants : Options API et Composition API. Options API est le style traditionnel hérité de Vue 2. Vous définissez un composant avec un objet d’options : data, methods, computed, mounted, etc.
Composition API est le nouveau style introduit dans Vue 3. Combiné à la syntaxe <script setup>, il permet une écriture plus concise. Il offre également une meilleure réutilisation logique et une excellente affinité avec TypeScript.
Dans les starter kits Inertia × Laravel, le style Composition API avec <script setup> est le standard. Tous les exemples de cette page sont écrits en <script setup>.

Position dans Laravel

Histoire

La relation entre Vue et Laravel est ancienne, remontant à Laravel 5.3 (2016), lorsque Vue a été adopté comme framework front-end par défaut. À l’époque, package.json incluait Vue, et un composant d’exemple resources/js/components/ExampleComponent.vue était fourni. Dans Laravel 6 (2019), le scaffold d’authentification a été extrait dans le paquet laravel/ui, et le scaffold Vue a également migré vers ce paquet. Aujourd’hui, le style principal consiste à choisir la configuration Inertia + Vue via un starter kit avec laravel new. Pour les utilisateurs de Laravel, Vue est le framework JS le plus familier, et les ressources d’apprentissage en français sont abondantes.

Le style principal actuel : Inertia × Vue

L’utilisation centrale de Vue dans Laravel aujourd’hui est Inertia × Vue. Inertia permet une architecture « monolithe moderne » où l’on peut passer directement des données du contrôleur Laravel aux composants Vue sans concevoir d’API.

Installation

Via un starter kit (recommandé)

Pour démarrer un nouveau projet, utiliser un starter kit est le moyen le plus simple.
En sélectionnant Vue dans l’invite interactive, tout ce qui suit est configuré automatiquement.
  • inertiajs/inertia-laravel (adaptateur côté serveur)
  • @inertiajs/vue3 (adaptateur côté client)
  • vue (Vue 3 lui-même)
  • @vitejs/plugin-vue (plugin Vite)
  • Middleware HandleInertiaRequests
  • Écrans d’authentification (connexion, inscription, etc.) déjà implémentés en Inertia + Vue

Installation manuelle

Pour ajouter à un projet existant, installez séparément les parties serveur et client.
Ensuite, ajoutez le plugin Vue à vite.config.js.
Démarrez l’application Inertia dans resources/js/app.js.
Pour les détails de l’installation manuelle (configuration du template racine, enregistrement du middleware, etc.), consultez la documentation officielle d’Inertia.

Structure des répertoires

Dans les starter kits, les composants de page Vue sont placés dans le répertoire resources/js/pages/.
Lorsque vous écrivez Inertia::render('Posts/Index', [...]), le composant correspondant est resources/js/pages/Posts/Index.vue.

Syntaxe des templates Vue

Voici les directives de template de base nécessaires pour lire et écrire le code d’un starter kit.

{{ }} — interpolation de variables

Utilisez les doubles accolades pour intégrer des valeurs ou expressions JavaScript dans le template.

v-if — branchement conditionnel

Équivalent à {#if} de Svelte ou à l’opérateur ternaire de React.

v-for — rendu de listes

Pour une mise à jour différentielle efficace, spécifiez toujours :key. Équivalent à Array.map() de React.

v-model — liaison bidirectionnelle

Avec v-model, vous pouvez synchroniser en bidirectionnel la valeur d’un élément de formulaire et une variable réactive.

: (v-bind) et @ (v-on)

  • :attr="value" — liaison d’une valeur dynamique à un attribut HTML (forme abrégée de v-bind:attr)
  • @event="handler" — enregistrement d’un écouteur d’événement (forme abrégée de v-on:event)

Bases des composants de page

Les composants de page Inertia sont de simples composants Vue. Les données passées depuis les contrôleurs Laravel sont reçues comme props.

Contrôleur

Composant de page Vue

Il suffit de déclarer les props avec defineProps() pour utiliser dans le template les données passées par le contrôleur. Aucune API REST n’a besoin d’être définie.
Grâce au composant <Link> fourni par @inertiajs/vue3, les transitions de page se font via XHR, évitant un rechargement complet du navigateur.
Vous pouvez l’écrire comme une balise <a> classique, mais en coulisses, Inertia ne remplace que le composant de page, offrant une expérience proche d’une SPA.

Composant Form

Le composant <Form> fourni par @inertiajs/vue3 est le style recommandé pour la soumission de formulaires, utilisé dans les écrans d’authentification des starter kits. On spécifie action et method en props et on accède à errors et processing avec v-slot.

Utilisation de base

v-slot="{ errors, processing }" correspond à la syntaxe des slots scoped de Vue ; le composant Form calcule et transmet automatiquement ces valeurs. Pour les champs de formulaire, on utilise l’attribut natif HTML name au lieu de v-model, permettant le fonctionnement de la collecte standard des données du navigateur.

Modèle du starter kit

Le starter kit utilise Wayfinder pour gérer les routes sous forme d’objets. store.form() retourne un objet contenant action et method de l’objet route, et vous le passez à <Form> par spread avec v-bind.
Les champs spécifiés dans reset-on-success sont automatiquement réinitialisés lorsque la soumission réussit. Utilisez-le pour les champs que vous souhaitez vider après l’envoi, comme les champs de mot de passe.
Si vous n’utilisez pas Wayfinder, passer directement l’URL comme action="/login" fonctionne de la même manière.

Helper useForm

Pour le traitement des formulaires, utilisez le helper useForm de @inertiajs/vue3. La gestion de l’état, la soumission et l’affichage des erreurs de validation s’implémentent simplement.

Côté contrôleur

Composant de formulaire Vue

Voici un résumé des principales propriétés retournées par useForm. Lorsque des erreurs de validation sont retournées, useForm affiche les erreurs tout en conservant le contenu saisi. Combiné à v-model, cela offre une expérience de formulaire fluide.

Données partagées (Shared Data)

Les données communes à toutes les pages (informations utilisateur connectées, messages flash, etc.) sont définies via la méthode share() du middleware HandleInertiaRequests.
Pour accéder aux données partagées depuis un composant Vue, utilisez usePage().
Les données partagées sont incluses dans chaque requête ; il est donc recommandé de les limiter au strict nécessaire. En les enveloppant dans une évaluation paresseuse avec fn(), elles ne sont évaluées que lorsqu’elles sont réellement consultées.

Bases de la réactivité de Vue 3

Voici les API de réactivité de Vue 3 à connaître pour développer avec Inertia × Vue.

ref — valeur réactive primitive

computed — propriété calculée

onMounted — traitement après montage


Résumé

Vue.js s’accorde bien avec Laravel, et sa force s’exprime tout particulièrement dans une configuration « monolithe moderne » via Inertia. Avec Inertia × Vue, vous profitez à la fois de la simplicité du back-end Laravel et de l’UI réactive de Vue. Créez un projet avec un starter kit et vous pourrez commencer à développer immédiatement, écrans d’authentification inclus.

Documentation officielle d'Inertia.js

Pour toutes les fonctionnalités d’Inertia v3, consultez la documentation officielle.
Dernière modification le 13 juillet 2026