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 metdata, methods, computed, mounted en meer.
<script setup>-syntaxis schrijf je nog beknopter. De logica is beter herbruikbaar en de samenwerking met TypeScript is uitstekend.
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. Depackage.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.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.vite.config.js.
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 directoryresources/js/pages/.
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
{#if} in Svelte of de ternaire operator in React.
v-for — lijsten renderen
: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 vanv-bind:attr)@event="handler"— registreert een eventlistener (verkorte vorm vanv-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
defineProps() en kunt de data uit de controller direct in de template gebruiken. Een REST API definiëren is niet nodig.
De Link-component
Met de <Link>-component van @inertiajs/vue3 verlopen paginanavigaties via XHR, zodat een volledige browserreload wordt vermeden.
<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.
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
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 methodeshare() van de middleware HandleInertiaRequests.
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.