Skip to main content

Wat is Vue.js

Vue.js (hierna Vue) is een progressief JavaScript-framework voor het bouwen van gebruikersinterfaces. “Progressief” betekent dat je klein kunt beginnen en naar behoefte functies kunt toevoegen: het leent zich zowel voor gedeeltelijke integratie in bestaande HTML-pagina’s als voor het bouwen van grootschalige SPA’s. De kern van Vue is reactiviteit. Verandert de data, dan wordt de DOM automatisch bijgewerkt, zodat je als ontwikkelaar niet handmatig hoeft te beheren “wanneer welk element moet worden bijgewerkt”.
Deze pagina behandelt de combinatie van Vue 3 en Inertia v3. De starter kits van Laravel 13 gebruiken deze opzet standaard.

Options API en Composition API

Vue 3 biedt twee stijlen om componenten te schrijven: de Options API en de Composition API. De Options API is de klassieke stijl uit Vue 2. Je definieert componenten met een optiesobject met data, methods, computed, mounted en meer.
De Composition API is de nieuwe stijl die in Vue 3 werd geïntroduceerd. In combinatie met de <script setup>-syntaxis schrijf je nog beknopter. De logica is beter herbruikbaar en de samenwerking met TypeScript is uitstekend.
In de Inertia × Laravel starter kits is de Composition API-stijl met <script setup> de standaard. Alle voorbeelden op deze pagina zijn daarom met <script setup> geschreven.

De positie binnen Laravel

Geschiedenis

De relatie tussen Vue en Laravel gaat ver terug en begon toen Vue in Laravel 5.3 (2016) werd gekozen als standaard frontendframework. De package.json van toen bevatte Vue, en er werd zelfs een voorbeeldcomponent resources/js/components/ExampleComponent.vue meegeleverd. Bij Laravel 6 (2019) werd de authenticatiescaffolding afgesplitst naar de package laravel/ui, waar ook de Vue-scaffold naartoe verhuisde. Tegenwoordig is het kiezen van de Inertia + Vue-opzet via de starter kits van laravel new de gangbare stijl. Voor Laravel-gebruikers is Vue het meest vertrouwde JS-framework, met een overvloed aan leermateriaal.

De huidige mainstream: Inertia × Vue

De belangrijkste manier om Vue in Laravel te gebruiken is tegenwoordig Inertia × Vue. Inertia realiseert een “moderne monoliet”-architectuur waarbij je zonder een API te ontwerpen data rechtstreeks vanuit Laravel-controllers aan Vue-componenten doorgeeft.

Setup

Via een starter kit (aanbevolen)

Voor een nieuw project is een starter kit de makkelijkste route.
Kies je in de interactieve prompt voor Vue, dan wordt dit allemaal automatisch opgezet:
  • inertiajs/inertia-laravel (server-side adapter)
  • @inertiajs/vue3 (clientadapter)
  • vue (Vue 3 zelf)
  • @vitejs/plugin-vue (Vite-plugin)
  • De middleware HandleInertiaRequests
  • Authenticatieschermen zoals inloggen en registreren (al geïmplementeerd met Inertia + Vue)

Handmatige installatie

Voeg je Inertia toe aan een bestaand project, dan installeer je de server- en clientzijde afzonderlijk.
Voeg vervolgens de Vue-plugin toe aan vite.config.js.
Start de Inertia-app in resources/js/app.js.
Zie de officiële Inertia-documentatie voor de details van een handmatige installatie (zoals het instellen van de roottemplate en het registreren van de middleware).

Directorystructuur

In de starter kits plaats je Vue-paginacomponenten in de directory resources/js/pages/.
Schrijf je Inertia::render('Posts/Index', [...]), dan is resources/js/pages/Posts/Index.vue de bijbehorende component.

De templatesyntaxis van Vue

Hier zijn de basisdirectives die je nodig hebt om de code van de starter kits te kunnen lezen en schrijven.

{{ }} — variabelen invoegen

Met dubbele accolades voeg je JavaScript-waarden of -expressies in de template in.

v-if — voorwaarden

Dit komt overeen met {#if} in Svelte of de ternaire operator in React.

v-for — lijsten renderen

Geef altijd :key op voor efficiënte diff-updates. Dit komt overeen met Array.map() in React.

v-model — two-way binding

Met v-model synchroniseer je de waarde van een formulierelement in twee richtingen met een reactieve variabele.

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

  • :attr="value" — bindt een dynamische waarde aan een HTML-attribuut (verkorte vorm van v-bind:attr)
  • @event="handler" — registreert een eventlistener (verkorte vorm van v-on:event)

De basis van paginacomponenten

Een Inertia-paginacomponent is een gewone Vue-component. De data die je vanuit de Laravel-controller doorgeeft, ontvang je als props.

Controller

Vue-paginacomponent

Je hoeft de props alleen te declareren met defineProps() en kunt de data uit de controller direct in de template gebruiken. Een REST API definiëren is niet nodig.
Met de <Link>-component van @inertiajs/vue3 verlopen paginanavigaties via XHR, zodat een volledige browserreload wordt vermeden.
Je schrijft hem net als een gewone <a>-tag, maar op de achtergrond vervangt Inertia alleen de paginacomponent, waardoor het aanvoelt als een SPA.

De Form-component

De <Form>-component van @inertiajs/vue3 is de aanbevolen stijl voor formulierverzending die in de authenticatieschermen van de starter kits wordt gebruikt. Je geeft action en method op als props en krijgt via v-slot toegang tot errors en processing.

Basisgebruik

v-slot="{ errors, processing }" is de scoped-slot-syntaxis van Vue: de Form-component berekent deze waarden automatisch en geeft ze door. Voor de formuliervelden gebruik je geen v-model maar het native HTML-attribuut name, zodat de standaard formulierdataverzameling van de browser werkt.

Het patroon van de starter kits

De starter kits gebruiken Wayfinder om routes als objecten te beheren. store.form() geeft een object terug met de action en method van het routeobject, dat je via v-bind in <Form> spreadt.
Velden die je opgeeft in reset-on-success worden bij een geslaagde verzending automatisch gereset. Gebruik dit voor velden die je na het verzenden leeg wilt maken, zoals wachtwoordvelden.
Gebruik je Wayfinder niet, dan werkt het net zo goed als je direct een URL doorgeeft, zoals action="/login".

De useForm-helper

Voor formulierverwerking gebruik je de useForm-helper van @inertiajs/vue3. Statebeheer van het formulier, verzenden en het tonen van validatiefouten implementeer je hiermee eenvoudig.

Aan de controllerkant

Vue-formuliercomponent

De belangrijkste properties van het object dat useForm teruggeeft: Komt er een validatiefout terug, dan toont useForm de fouten terwijl de ingevoerde inhoud behouden blijft. In combinatie met v-model krijg je een naadloze formulierervaring.

Gedeelde data (shared data)

Data die je op elke pagina nodig hebt (zoals de ingelogde gebruiker en flashberichten) definieer je in de methode share() van de middleware HandleInertiaRequests.
Om vanuit een Vue-component bij de gedeelde data te komen, gebruik je usePage().
Gedeelde data wordt bij elke request meegestuurd; beperk deze daarom tot het strikt noodzakelijke. Gebruik je lazy evaluation met fn(), dan wordt de data alleen geëvalueerd wanneer er daadwerkelijk toegang toe is.

De basis van de reactiviteit van Vue 3

Hier zijn de reactiviteits-API’s van Vue 3 die je moet kennen om met Inertia × Vue te ontwikkelen.

ref — primitieve reactieve waarden

computed — berekende properties

onMounted — verwerking na het mounten


Samenvatting

Vue.js sluit uitstekend aan bij Laravel en komt vooral tot zijn recht in de “moderne monoliet”-opzet via Inertia. Met Inertia × Vue profiteer je zowel van de eenvoud van een Laravel-backend als van de reactieve UI van Vue. Maak je een project aan met de starter kit, dan kun je direct beginnen met ontwikkelen, inclusief authenticatieschermen.

Officiële Inertia.js-documentatie

Raadpleeg de officiële documentatie voor alle functies van Inertia v3.
Laatst gewijzigd op 6 september 2026