{"id":48465,"date":"2022-12-12T16:18:54","date_gmt":"2022-12-12T15:18:54","guid":{"rendered":"https:\/\/kinqsta.com\/nl\/?p=48465&#038;preview=true&#038;preview_id=48465"},"modified":"2023-06-30T15:20:19","modified_gmt":"2023-06-30T13:20:19","slug":"laravel-inertia","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/","title":{"rendered":"Zo gebruik je Inertia.js in je Laravel projecten"},"content":{"rendered":"<p>Multi-page applicaties (MPA&#8217;s) worden met de dag minder populair. Bekende platforms als Facebook, Twitter, YouTube, Github, en vele andere gebruiken in plaats daarvan al geruime tijd single-page applicatie (SPA) technologie.<\/p>\n<p>Met deze trendy technologie kunnen gebruikers zich snel en responsief bezighouden met webapplicaties, omdat alles aan de clientside wordt gerenderd. Het kan echter lastig zijn voor developers die serverside gerenderde applicaties bouwen met frameworks als Laravel of Django.<\/p>\n<p>Gelukkig schoot Inertia.js te hulp.<\/p>\n\n<p>In dit artikel laten we zien hoe je aan de slag kunt met Inertia.js en hoe je het kunt gebruiken met Laravel, Vue.js en Tailwind CSS om een moderne blogwebapp te maken. We delen ook hoe je SPA&#8217;s SEO vriendelijker kunt maken, en nog een paar andere trucs.<\/p>\n<p>Als je net begint met Laravel, raden we je aan <a href=\"https:\/\/kinqsta.com\/blog\/laravel-developer\/\">eerst dit artikel<\/a> te lezen, zodat je er helemaal klaar voor bent om alles in dit artikel toe te passen.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Waarom SPA?<\/h2>\n<p>Voordat we ons kunnen afvragen waarom we Inertia moeten gebruiken, moeten we ons eerst \u00fcberhaupt afvragen: &#8220;Waarom SPA?&#8221;<\/p>\n<p>Waarom zou iemand een clientside gerenderde single-page applicatie verkiezen boven traditionele serverside applicaties? Wat zou een full-stack Laravel developer kunnen overhalen om afscheid te nemen van <a href=\"https:\/\/kinqsta.com\/nl\/blog\/wat-is-laravel\/#templating\">blade componenten<\/a>?<\/p>\n<p>Het korte antwoord: omdat snelheid en reactiesnelheid essentieel zijn voor elke succesvolle gebruikersbetrokkenheid.<\/p>\n<p>In het geval van MPA&#8217;s stuurt de browser voortdurend verzoeken naar de backend, die vervolgens talloze databasequeries uitvoert. Nadat de database en de server de queries hebben verwerkt en aan de browser hebben geleverd, wordt de pagina gerenderd.<\/p>\n<p>Maar SPA&#8217;s zijn anders. De applicatie brengt alles wat de gebruiker nodig heeft direct naar de pagina, zodat de browser geen queries hoeft te sturen of de pagina opnieuw hoeft te laden om nieuwe HTML elementen te renderen.<\/p>\n<p>Vanwege deze unieke gebruikerservaring willen veel grote bedrijven dat hun websites single-page applicaties worden.<\/p>\n<p>Dat gezegd hebbende, kan het maken van een single-page applicatie moeilijk zijn voor Laravel developers, omdat ze dan Vue.js of React moeten gaan gebruiken in plaats van blade templates, waardoor veel Laravel juweeltjes die tijd en moeite besparen verloren gaan.<\/p>\n<p>Maar nu we Inertia.js hebben, is dat allemaal veranderd.<\/p>\n<h2>Waarom Inertia?<\/h2>\n<p>Als Laravel developers web SPA&#8217;s zouden bouwen met Vue v\u00f3\u00f3r het tijdperk van Inertia, dan moesten ze API&#8217;s opzetten en JSON gegevens retourneren met Laravel, en dan iets als AXIOS gebruiken om de gegevens op te halen in Vue componenten. Ze zouden ook iets als Vue Router nodig hebben om routes te beheren, wat zou betekenen dat ze Laravel routing zouden verliezen, evenals middlewares en controllers.<\/p>\n<p>Met Inertia.js daarentegen kunnen developers moderne single-page Vue, React en Svelte apps bouwen met behulp van klassieke serverside routing en controllers. Inertia is ontworpen voor developers van Laravel, Ruby on Rails en Django, zodat ze apps kunnen bouwen zonder hun coderingstechnieken te veranderen: controllers maken, gegevens ophalen uit een database en views renderen<\/p>\n<p>Dankzij Inertia.js zullen Laravel developers zich meteen thuis voelen.<\/p>\n<h2>Zo werkt Inertia<\/h2>\n<p>Alleen SPA bouwen met Laravel en Vue geeft je een volledige JavaScript pagina voor je frontend, maar dit geeft je geen single-page appervaring. Elke aangeklikte link zorgt ervoor dat je clientside framework opnieuw opstart bij de volgende paginalading.<\/p>\n<p>Dit is waar Inertia helpt.<\/p>\n<p>Inertia is in feite een clientside routingbibliotheek. Hiermee kun je tussen pagina&#8217;s navigeren zonder de hele pagina opnieuw te hoeven laden. Dit gebeurt via het <code>&lt;Link&gt;<\/code> component, dat een lichtgewicht wrapper is rond een standaard anchortag.<\/p>\n<p>Als je op een Inertia link klikt, onderschept Inertia de klik en stuurt je in plaats daarvan door naar XHR. De browser zal de pagina op deze manier niet herladen, waardoor de gebruiker een volledige single-page ervaring krijgt.<\/p>\n<h2>Aan de slag met Inertia<\/h2>\n<figure id=\"attachment_134651\" aria-describedby=\"caption-attachment-134651\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134651 size-large\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-tutorial-1024x640.png\" alt=\"Een eenvoudige pagina met \"Kinsta Blog\" in een blauwe banner bovenaan en een enkele rij voorbeeldartikelkaarten.\" width=\"1024\" height=\"640\"><figcaption id=\"caption-attachment-134651\" class=\"wp-caption-text\">Een voorbeeldpagina gemaakt met Inertia.js<\/figcaption><\/figure>\n<p>Om Inertia te begrijpen en hoe het te integreren met Laravel, gaan we een blogwebapp bouwen genaamd <strong>Kinsta Blog<\/strong> met behulp van de meest krachtige combinatie, Laravel voor de backend, Vue.js voor de JavaScript frontend, en Tailwind CSS voor styling.<\/p>\n<p>Als je deze tutorial liever in een lokale omgeving volgt, kun je <a href=\"https:\/\/kinqsta.com\/nl\/devkinsta\/\">DevKinsta<\/a> gebruiken, een krachtige tool voor developers, ontwerpers en webbureaus waarmee ze WordPress webapps met \u00e9\u00e9n en meerdere pagina&#8217;s kunnen bouwen. Gelukkig kan WordPress gemakkelijk worden ge\u00efntegreerd met Laravel met behulp van het <a href=\"https:\/\/github.com\/corcel\/corcel\">Corcel<\/a> pakket.<\/p>\n<h3>Voorwaarden<\/h3>\n<p>Om het meeste uit deze tutorial te halen moet je bekend zijn met het volgende:<\/p>\n<ul>\n<li>Laravel basics (installatie, database, databasemigraties, Eloquent Models, controllers en routing)<\/li>\n<li>Vue.js basics (installatie, structuur en formulieren)<\/li>\n<\/ul>\n<p>Als je je onzeker voelt, bekijk dan deze fantastische <a href=\"https:\/\/kinqsta.com\/nl\/blog\/laravel-tutorial\/\">gratis en betaalde Laravel tutorials<\/a>. Laten we beginnen.<\/p>\n<h3>Stap 1: Installeer de kernelementen<\/h3>\n<p>Om je te concentreren op Inertia.js en meteen naar het leuke gedeelte te gaan, moet je de volgende instellingen klaar hebben staan:<\/p>\n<ol>\n<li>Vers ge\u00efnstalleerd Laravel 9 project met de naam <code>kinsta-blog<\/code><\/li>\n<li>Tailwind CSS CLI ge\u00efnstalleerd in ons Laravel project<\/li>\n<li>Afbeeldingsbestand &#8220;kinsta-logo.png&#8221;. Download &#038; pak het Kinsta logo pakket uit van <a href=\"https:\/\/kinqsta.com\/nl\/pers\/\">https:\/\/kinqsta.com\/press\/<\/a>, en kopieer kinsta-logo2.png naar public\/images directory als kinsta-logo.png.<\/li>\n<li>Twee blade componenten in <strong>kinsta-blog\/resources\/views<\/strong> voor het bekijken van de homepage van de blog en een enkel artikel op de blog zoals hieronder te zien is:&#8221;\/resources\/views\/<strong>index.blade.php<\/strong>&#8220;:\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n    &lt;header&gt;\n      &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main&gt;\n      &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n      &lt;section&gt;\n        &lt;article&gt;\n          &lt;div&gt;\n            &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n          &lt;\/div&gt;\n\n          &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n          &lt;p&gt;\n            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n            itaque error vel perferendis aliquam numquam dignissimos, expedita\n            perspiciatis consectetur!\n          &lt;\/p&gt;\n\n          &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n        &lt;\/article&gt;\n      &lt;\/section&gt;\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n      &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n      &lt;input type=\"email\" \/&gt;\n    &lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#8220;\/resources\/views\/<strong>show.blade<\/strong>.php&#8221;:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;\/head&gt;\n\n  &lt;body&gt;\n    &lt;main&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n        &lt;p&gt;Article content goes here&lt;\/p&gt;\n      &lt;\/article&gt;\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n      &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n      &lt;input type=\"email\" \/&gt;\n    &lt;\/footer&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<\/li>\n<li>MySQL lokale database genaamd <code>kinsta_blog<\/code> verbonden met ons project:&#8221;<strong>.env<\/strong>&#8220;:\n<pre><code class=\"language-js\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=kinsta_blog\nDB_USERNAME=root\nDB_PASSWORD=<\/code><\/pre>\n<\/li>\n<li>Artikelmodel, migraties en factories:&#8221;app\/Models\/<strong>Article.php<\/strong>&#8220;:\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppModels;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Article extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['title', 'excerpt', 'body'];\n}<\/code><\/pre>\n<p>\u201cdatabase\/migrations\/<strong>create_articles_table.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n\n    public function up()\n    {\n        Schema::create('articles', function (Blueprint $table) {\n            $table-&gt;id();\n            $table-&gt;string('title');\n            $table-&gt;text('excerpt');\n            $table-&gt;text('body');\n            $table-&gt;timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('articles');\n    }\n};<\/code><\/pre>\n<p>\u201cdatabase\/factories\/<strong>ArticleFactory.php<\/strong>\u201c:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace DatabaseFactories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ArticleFactory extends Factory\n{\n\n    public function definition()\n    {\n        return [\n            'title' =&gt; $this-&gt;faker-&gt;sentence(6),\n            'excerpt' =&gt; $this-&gt;faker-&gt;paragraph(4),\n            'body' =&gt; $this-&gt;faker-&gt;paragraph(15),\n        ];\n    }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Dat is alles wat we nodig hebben om te beginnen! Laten we nu aan de slag gaan en Inertia.js introduceren in ons project.<\/p>\n<h3>Stap 2: Inertia installeren<\/h3>\n<p>Het installatieproces van Inertia is verdeeld in twee grote fasen: serverside (Laravel) en clientside (VueJs).<\/p>\n<p>De offici\u00eble installatiehanleiding in de Inertia documentatie is een beetje verouderd omdat <a href=\"https:\/\/vitejs.dev\/guide\/#scaffolding-your-first-vite-project\">Laravel 9 nu standaard Vite<\/a> gebruikt, maar ook dat zullen we doornemen.<\/p>\n<h4>1. Serverside<\/h4>\n<p>Het eerste wat we moeten doen is Inertia serverside adapters installeren met het onderstaande terminalcommando via Composer.<\/p>\n<pre><code class=\"language-bash\">composer require inertiajs\/inertia-laravel<\/code><\/pre>\n<p>Nu gaan we ons roottemplate instellen, dat een enkel blade bestand zal zijn en gebruikt zal worden om je CSS en JS bestanden te laden, en ook een Inertia root die gebruikt zal worden om onze JavaScript applicatie te starten.<\/p>\n<p>Omdat we de meest recente versie Laravel 9 v9.3.1 gebruiken, moeten we ook Vite in staat stellen zijn werk te doen door het op te nemen in onze tags in \/resources\/views\/<strong>app.blade.php<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/&gt;\n\n    <!-- Fetch project name dynamically -->\n    &lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n    <!-- Scripts -->\n    @vite('resources\/js\/app.js') @inertiaHead\n  &lt;\/head&gt;\n\n  &lt;body class=\"font-sans antialiased\"&gt;\n    @inertia\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Let op hoe we de projecttitel dynamisch kunnen ophalen door het <code>inertia<\/code> attribuut toe te voegen aan de <code>&lt;title&gt;<\/code> tags.<\/p>\n<p>We hebben ook de <code>@vite<\/code> directive toegevoegd aan de head om Vite het pad te laten weten van ons JavaScript hoofdbestand waar we onze app hebben gemaakt en onze CSS hebben ge\u00efmporteerd. Vite is een tool dat helpt bij de ontwikkeling van JavaScript en CSS door developers in staat te stellen wijzigingen aan de frontend te bekijken zonder de pagina te hoeven verversen tijdens lokale ontwikkeling.<\/p>\n<p>Onze volgende stap is het maken van <strong>HandleInertiaRequests<\/strong> middleware en het publiceren ervan naar ons project. Dat kunnen we doen door het onderstaande terminalcommando in de hoofdmap van ons project af te vuren:<\/p>\n<pre><code class=\"language-bash\">php artisan inertia:middleware<\/code><\/pre>\n<p>Zodra dit voltooid is, ga je naar &#8220;App\/Http\/<strong>Kernel.php<\/strong>&#8221; en registreer je <code>HandleInertiaRequests<\/code> als laatste item in je web middlewares:<\/p>\n<pre><code class=\"language-php\">'web' =&gt; [\n    \/\/ ...\n     App\\Http\\Middleware\\HandleInertiaRequests::class,\n],<\/code><\/pre>\n<h4>2. Clientside<\/h4>\n<p>Vervolgens moeten we onze frontend Vue.js 3 dependencies op dezelfde manier installeren als aan de serverside:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/inertia @inertiajs\/inertia-vue3\n\/\/ or\nyarn add @inertiajs\/inertia @inertiajs\/inertia-vue3<\/code><\/pre>\n<p>Vervolgens moet je Vue.js 3 binnenhalen:<\/p>\n<pre><code class=\"language-bash\">npm install vue@next<\/code><\/pre>\n<p>Werk dan je primaire JavaScript bestand bij om Inertia.js te initialiseren met Vue.js 3, Vite, en Laravel:<\/p>\n<p>&#8220;resources\/js\/<strong>app.js<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\n\ncreateInertiaApp({\n  title: (title) =&gt; `${title} - ${appName}`,\n  resolve: (name) =&gt;\n    resolvePageComponent(\n      `.\/Pages\/${name}.vue`,\n      import.meta.glob(\".\/Pages\/**\/*.vue\")\n    ),\n  setup({ el, app, props, plugin }) {\n    return createApp({ render: () =&gt; h(app, props) })\n      .use(plugin)\n      .mount(el);\n  },\n});<\/code><\/pre>\n<p>In het bovenstaande codefragment gebruiken we Laravel&#8217;s plugin <code>resolvePageComponent<\/code>, en we vertellen het om onze componenten op te lossen vanuit de directory <strong>.\/Pages\/$name.vue<\/strong>. Dit is omdat we later in ons project onze Inertia componenten in deze map zullen opslaan, en deze plugin helpt ons bij het automatisch laden van die componenten uit de juiste map.<\/p>\n<p>Wat overblijft is de installatie van <code>vitejs\/plugin-vue<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm i @vitejs\/plugin-vue<\/code><\/pre>\n<p>En het bestand <strong>vite.config.js<\/strong> bij te werken:<\/p>\n<pre><code class=\"language-js\">import { defineConfig } from \"vite\";\nimport laravel from \"laravel-vite-plugin\";\nimport vue from \"@vitejs\/plugin-vue\";\n\nexport default defineConfig({\n  plugins: [\n    laravel({\n      input: [\"resources\/css\/app.css\", \"resources\/js\/app.js\"],\n      refresh: true,\n    }),\n    vue({\n      template: {\n        transformAssetUrls: {\n          base: null,\n          includeAbsolute: false,\n        },\n      },\n    }),\n  ],\n});<\/code><\/pre>\n<p>De laatste stap is het installeren van onze dependencies en het compileren van onze bestanden:<\/p>\n<pre><code class=\"language-bash\">npm install\n\nnpm run dev<\/code><\/pre>\n<p>En voil\u00e0! Je hebt een werkende Laravel 9 applicatie met Vue.js 3 en Vite. Nu moeten we iets in actie zien!<\/p>\n<h2 id=\"creating-inertia-pages\" class=\"has-anchor-hash\">Inertia\u00a0pagina&#8217;s maken<\/h2>\n<p>Weet je nog die twee blade\u00a0 bestanden (<strong>index<\/strong> en <strong>show<\/strong>) voor het bekijken van onze homepage en een los artikel?<\/p>\n<p>Het enige blade bestand dat we nodig hebben bij het gebruik van Inertia is <strong>app.blade.php<\/strong>, dat we al een keer gebruikt hebben bij de installatie van Inertia. Dus wat gebeurt er nu met die bestanden?<\/p>\n<p>We transformeren die bestanden van blade componenten in Inertia.js componenten.<\/p>\n<p>Elke pagina in je applicatie heeft zijn eigen controller en JavaScript component met Inertia. Zo kun je alleen de gegevens verkrijgen die voor die pagina nodig zijn, zonder een API te gebruiken. Inertia pagina&#8217;s zijn niets meer dan JavaScript componenten, in ons geval zijn het Vue.js componenten. Ze hebben niets bijzonders in zich. Dus wat we gaan doen is alle HTML content wrappen tussen <code>&lt;template&gt;<\/code> tags en alles wat met JavaScript te maken heeft wordt gewrapped met <code>&lt;script&gt;<\/code> tags.<\/p>\n<p>Maak een map genaamd &#8220;Pages&#8221; en verplaats je bestanden daarheen. Dus hebben we &#8220;<strong>index.blade.php<\/strong>&#8221; en &#8220;<strong>show.blade.php<\/strong>&#8221; in &#8220;<strong>.\/resources\/js\/Pages<\/strong>&#8220;. Dan veranderen we het bestandsformat in &#8220;.vue&#8221; in plaats van &#8220;.blade.php&#8221;, waar we de eerste letter van hun namen hoofdletter maken en de content veranderen in een standaard Vue.js component. We sluiten de tags <code>&lt;html&gt;<\/code>, <code>&lt;head&gt;<\/code>, en <code>&lt;body&gt;<\/code> uit, omdat die al zijn opgenomen in het hoofdcomponent van de blade.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n  \/\/\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;header&gt;\n    &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n    &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n        &lt;p&gt;\n          Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n          itaque error vel perferendis aliquam numquam dignissimos, expedita\n          perspiciatis consectetur!\n        &lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>&#8220;resources\/js\/Pages\/<strong>Show.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n  \/\/\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;header&gt;\n    &lt;h1&gt;Welcome to Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n    &lt;article&gt;\n      &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n      &lt;p&gt;Article content goes here&lt;\/p&gt;\n    &lt;\/article&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Iets zit me dwars! We blijven onze header en footer kopi\u00ebren en plakken in elk component, wat niet goed is. Laten we een Inertia basic Layout maken om onze persistente componenten in op te slaan.<\/p>\n<p>Maak een map genaamd &#8220;Layouts&#8221; in &#8220;<strong>\/resources\/js<\/strong>&#8221; en maak in die map een bestand genaamd &#8220;KinstaLayout.vue&#8221;. Dit bestand zal onze header en footer bevatten en de <code>main<\/code> met een <code>&lt;slot \/&gt;<\/code> zodat alle componenten die met deze layout zijn gewrapped erin kunnen worden ingesloten. Dit bestand moet er als volgt uitzien :<\/p>\n<p>&#8220;resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;header&gt;\n    &lt;h1&gt;Kinsta Blog&lt;\/h1&gt;\n  &lt;\/header&gt;\n\n  &lt;main&gt;\n        &lt;slot \/&gt;\n  &lt;\/main&gt;\n\n  &lt;footer&gt;\n    &lt;h2&gt;Join our Newsletter&lt;\/h2&gt;\n\n    &lt;input type=\"email\" \/&gt;\n  &lt;\/footer&gt;\n\n&lt;\/template&gt;<\/code><\/pre>\n<p>Dan gaan we deze nieuwe layout importeren in onze pagina&#8217;s en alle HTML content ermee wrappen. Onze componenten zouden er zo uit moeten zien:<\/p>\n<p><strong>Index.vue<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;KinstaLayout&gt;\n    &lt;section&gt;\n      &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n      &lt;article&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;Title for the blog&lt;\/h3&gt;\n        &lt;p&gt;\n          Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illum rem\n          itaque error vel perferendis aliquam numquam dignissimos, expedita\n          perspiciatis consectetur!\n        &lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n  &lt;\/KinstaLayout&gt;\n &lt;\/template&gt;<\/code><\/pre>\n<p><strong>Show.vue<\/strong>:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\n import KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n&lt;\/script&gt;\n\n&lt;template&gt;\n  &lt;KinstaLayout&gt;\n    &lt;article&gt;\n      &lt;h1&gt;Title for the blog&lt;\/h1&gt;\n\n      &lt;p&gt;Article content goes here&lt;\/p&gt;\n    &lt;\/article&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<h2>Laravel Routes en Inertia Render<\/h2>\n<p>Laten we eerst het &#8220;<strong>ArticleFactory<\/strong>&#8221; bestand gebruiken dat we hebben van ons tutorial startpunt en wat artikelen in onze database plaatsen.<\/p>\n<p>&#8220;database\/seeders\/<strong>databaseSeeder.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Article;\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    public function run()\n    {\n        Article::factory(10)-&gt;create();\n    }\n}<\/code><\/pre>\n<p>Druk nu op het onderstaande terminalcommando om je tabellen te migreren en de neppe gegevens van de factories te seeden:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate:fresh --seed<\/code><\/pre>\n<p>Dit zal 10 neppe artikelen in de database aanmaken, die we aan onze view moeten doorgeven met behulp van Laravel routing. Nu we Inertia gebruiken om views te renderen, zal de manier waarop we vroeger onze routes schreven enigszins veranderen. Laten we onze eerste Laravel Inertia route maken in &#8220;routes\/<strong>web.php<\/strong>&#8221; en de homepage-weergave teruggeven vanuit &#8220;\/resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;.<\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse App\\Models\\Article;\nuse Illuminate\\Support\\Facades\\Route;\nuse Inertia\\Inertia;\n\nRoute::get('\/', function () {\n    return Inertia::render('Index', [\n        'articles' =&gt; Article::latest()-&gt;get()\n    ]);\n})-&gt;name('home');<\/code><\/pre>\n<p>Let op dat we <code>Inertia<\/code> hebben ge\u00efmporteerd en niet de Laravel helper <code>view()<\/code> hebben gebruikt om de weergave terug te geven, maar in plaats daarvan <code>Inertia::render<\/code>. Inertia zal ook standaard zoeken naar de bestandsnaam die we in onze route hebben genoemd in de map <strong>Pages<\/strong> bij &#8220;resources\/js&#8221;.<\/p>\n<p>Ga naar het Indexbestand en stel de opgehaalde gegevens in als een prop en loop erover met <code>v-for<\/code> om de resultaten te tonen. Definieer tussen de scripttags de doorgegeven gegevens als een prop. Het enige wat Inertia moet weten is welk type gegevens je verwacht, wat in ons geval een &#8216;articles&#8217; object is dat een array van artikelen bevat.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\n  defineProps({\n    articles: Object,\n  });\n&lt;\/script&gt;<\/code><\/pre>\n<p>Let op dat het voldoende is om het alleen als prop te defini\u00ebren zonder het terug te geven, omdat we het <code>setup<\/code> format gebruiken voor Vue.js 3 composition API. Als we opties API gebruiken dan zouden we het moeten retourneren.<\/p>\n<p>Laten we de loop maken:<\/p>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;KinstaLayout&gt;\n    &lt;h2&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section&gt;\n      \/\/ Looping over articles\n      &lt;article v-for=\"article in articles\":key=\"article.id\"&gt;\n        &lt;div&gt;\n          &lt;img src=\"\/images\/kinsta-logo.png\" alt=\"Article thumbnail\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;h3&gt;{{article.title}}&lt;\/h3&gt;\n        &lt;p&gt;{{article.excerpt}}&lt;\/p&gt;\n\n        &lt;a href=\"#\"&gt;Read more&lt;\/a&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n  &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p><code>npm run dev<\/code> (laten lopen omdat we Vite gebruiken) en <code>php artisan serve<\/code> de laravel ontwikkelingsserver starten en onze website openen, dan zien we de verwachte pagina die alle tien artikelen in de database weergeeft.<\/p>\n<p>Nu gebruiken we de extensie <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/vuejs-devtools\/nhdogjmejiglipccpnnnanhbledajbpd?hl=en\">Vue DevTools van Google Chrome<\/a>, waarmee we mijn applicatie kunnen debuggen. Laten we eens zien hoe onze gegevens worden doorgegeven aan de component.<\/p>\n<figure id=\"attachment_134667\" aria-describedby=\"caption-attachment-134667\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134667 size-large\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/inspect-Inertia-passed-data-1024x543.png\" alt=\"Chrome's Vue DevTools extensie met een lijst met Inertia eigenschappen voor de open pagina.\" width=\"1024\" height=\"543\"><figcaption id=\"caption-attachment-134667\" class=\"wp-caption-text\">Inertie eigenschappen inspecteren.<\/figcaption><\/figure>\n<p>&#8220;articles&#8221; wordt aan de component doorgegeven als een prop object dat een array van artikelen bevat; elk artikel in de array is ook een object met properties die overeenkomen met de gegevens die het uit de database heeft verkregen. Dit betekent dat alle gegevens die we van Laravel naar Inertia overdragen, worden behandeld als een prop.<\/p>\n<h2>Tailwind CSS gebruiken met Inertia.js<\/h2>\n<p>Omdat Tailwind bij aanvang al in ons project is ge\u00efnstalleerd, hoeven we het alleen maar te vertellen dat het onze Inertia componenten moet lezen. Dit kan worden bereikt door &#8220;<strong>tailwind.config.js<\/strong>&#8221; als volgt te bewerken:<\/p>\n<pre><code class=\"language-js\">\/** @type {import('tailwindcss').Config} *\/\nmodule.exports = {\n  content: [\n    \".\/storage\/framework\/views\/*.php\",\n    \".\/resources\/views\/**\/*.blade.php\",\n    \".\/resources\/js\/**\/*.vue\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n};<\/code><\/pre>\n<p>Zorg er vervolgens voor dat we ons CSS bestand hebben ge\u00efmporteerd in &#8220;resources\/js\/<strong>app.js<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-js\">import \"..\/css\/app.css\";<\/code><\/pre>\n<p>En nu zijn we klaar om onze componenten te stylen.<\/p>\n<p>&#8220;resources\/js\/Pages\/<strong>Index.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\n  defineProps({\n    articles: Object,\n  });\n&lt;\/script&gt;\n\n&lt;template&gt;\n &lt;KinstaLayout&gt;\n    &lt;h2 class=\"text-2xl font-bold py-10\"&gt;Read our latest articles&lt;\/h2&gt;\n\n    &lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n      &lt;article\n        v-for=\"article in articles\"\n        :key=\"article.id\"\n        class=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n      &gt;\n\n         &lt;img\n            src=\"\/images\/kinsta-logo.png\"\n            class=\"w-32 h-32 rounded-xl object-cover\"\n            alt=\"\"\n         \/&gt;\n\n        &lt;div class=\"flex flex-col text-left justify-between pl-3 space-y-5\"&gt;\n          &lt;h3\n            class=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n          &gt;\n            &lt;a href=\"#\"&gt;{{ article.title }}&lt;\/a&gt;\n          &lt;\/h3&gt;\n          &lt;p&gt;\n           {{ article.excerpt }}\n          &lt;\/p&gt;\n          &lt;a\n            href=\"#\"\n            class=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n            &gt;Read more&lt;\/a\n          &gt;\n        &lt;\/div&gt;\n      &lt;\/article&gt;\n    &lt;\/section&gt;\n &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>&#8220;resources\/js\/Layouts\/<strong>KinstaLayout.vue<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;header\n        class=\"bg-gradient-to-r from-blue-700 via-indigo-700 to-blue-700 w-full text-center py-4\"\n    &gt;\n        &lt;h1 class=\"text-white font-bold text-4xl\"&gt;Kinsta Blog&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main class=\"container mx-auto text-center\"&gt;\n        &lt;slot \/&gt;\n    &lt;\/main&gt;\n\n    &lt;footer\n        class=\"bg-gradient-to-b from-transparent to-gray-300 w-full text-center mt-5 py-10 mx-auto\"\n    &gt;\n        &lt;h2 class=\"font-bold text-xl pb-5\"&gt;Join our Newsletter&lt;\/h2&gt;\n\n        &lt;input\n            class=\"rounded-xl w-80 h-12 px-3 py-2 shadow-md\"\n            type=\"email\"\n            placeholder=\"Write your email..\"\n        \/&gt;\n    &lt;\/footer&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Als je naar de browser kijkt, zie je dat Vite de pagina al heeft bijgewerkt met wat Tailwind magie.<\/p>\n<figure id=\"attachment_134669\" aria-describedby=\"caption-attachment-134669\" style=\"width: 911px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134669 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-blog.gif\" alt=\"Een scrollende afbeelding met een werkende versie van het \"Kinsta Blog\" voorbeeld van eerder.\" width=\"911\" height=\"620\"><figcaption id=\"caption-attachment-134669\" class=\"wp-caption-text\">Het renderen van Inertia eigenschappen.<\/figcaption><\/figure>\n<h2>Inertia links<\/h2>\n<p>Nu we een werkende homepage hebben die alle artikelen in de database kan weergeven, moeten we nog een route maken om individuele artikelen weer te geven. Laten we een nieuwe route maken en de URL instellen op een &#8220;id&#8221; wildcard:<\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8221;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse App\\Models\\Article;\nuse Illuminate\\Support\\Facades\\Route;\nuse Inertia\\Inertia;\n\nRoute::get('\/', function () {\n    return Inertia::render('Index', [\n        'articles' =&gt; Article::latest()-&gt;get()\n    ]);\n})-&gt;name('home');\n\nRoute::get('\/posts\/{article:id}', function (Article $article) {\n    return Inertia::render('Show', [\n        'article' =&gt; $article\n    ]);\n})-&gt;name('article.show');<\/code><\/pre>\n<p>We importeren het &#8220;Article&#8221; model en voegen een nieuwe route toe om de <strong>Show.vue<\/strong> Inertia component terug te geven. We maakten ook gebruik van <a href=\"https:\/\/laravel.com\/docs\/master\/routing#customizing-the-key\">Laravel&#8217;s route model binding<\/a>, waardoor Laravel automatisch het artikel krijgt waarnaar we verwijzen.<\/p>\n<p>Alles wat we nu nodig hebben is een manier om deze route te bezoeken door op een link van de homepage te klikken zonder de hele pagina opnieuw te hoeven laden. Dit is mogelijk met Inertia&#8217;s magische tool <code>&lt;Link&gt;<\/code>. We hebben in de inleiding vermeld dat Inertia <code>&lt;Link&gt;<\/code> gebruikt als wrapper voor een standaard anchortag <code>&lt;a&gt;<\/code>, en dat deze wrapper bedoeld is om paginabezoeken zo naadloos mogelijk te laten verlopen. In Inertia kan de <code>&lt;Link&gt;<\/code> tag zich gedragen als een anchortag die <code>&lt;GET&gt;<\/code> verzoeken uitvoert, maar hij kan ook tegelijkertijd fungeren als een <code>&lt;button&gt;<\/code> en een <code>&lt;form&gt;<\/code>. Laten we eens kijken hoe we dit in ons project kunnen toepassen.<\/p>\n<p>In onze Index.vue zullen we <code>&lt;Link&gt;<\/code> van Inertia importeren, en de anchortags <code>&lt;a&gt;<\/code> verwijderen en vervangen door Inertia <code>&lt;Link&gt;<\/code> tags. Het <code>href<\/code> attribuut wordt ingesteld op de route URL die we eerder maakten voor het bekijken van het artikel:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\nimport { Link } from \"@inertiajs\/inertia-vue3\";\n\ndefineProps({\n    articles: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;KinstaLayout&gt;\n        &lt;section class=\"space-y-5 border-b-2 pb-10\"&gt;\n            &lt;h2 class=\"text-2xl font-bold pt-10 mx-auto text-center\"&gt;\n                Read our latest articles\n            &lt;\/h2&gt;\n\n            &lt;article\n                v-for=\"article in articles\"\n                :key=\"article.id\"\n                class=\"flex justify-center items-center shadow-md bg-white rounded-xl p-4 mx-auto max-w-3xl\"\n            &gt;\n                &lt;img\n                    src=\"\/images\/kinsta-logo.png\"\n                    class=\"w-32 h-32 rounded-xl object-cover\"\n                    alt=\"\"\n                \/&gt;\n\n                &lt;div\n                    class=\"flex flex-col text-left justify-between pl-3 space-y-5\"\n                &gt;\n                    &lt;h3\n                        class=\"text-xl font-semibold text-indigo-600 hover:text-indigo-800\"\n                    &gt;\n                        &lt;Link :href=\"'\/posts\/' + article.id\"&gt;{{\n                            article.title\n                        }}&lt;\/Link&gt;\n                    &lt;\/h3&gt;\n                    &lt;p&gt;\n                        {{ article.excerpt }}\n                    &lt;\/p&gt;\n                    &lt;Link\n                        :href=\"'\/posts\/' + article.id\"\n                        class=\"text-indigo-600 hover:text-indigo-800 w-fit self-end font-semibold\"\n                        &gt;Read more\n                    &lt;\/Link&gt;\n                &lt;\/div&gt;\n            &lt;\/article&gt;\n        &lt;\/section&gt;\n    &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Laten we <strong>Show.vue<\/strong> stylen met Tailwind om het er wat meer aangekleed en er mooi voor ons bezoek uit te laten zien. En ook moeten we het laten weten dat het een &#8220;Article&#8221; object moet verwachten en dat als prop instellen:<\/p>\n<pre><code class=\"language-html\">&lt;script setup&gt;\nimport KinstaLayout from \"..\/Layouts\/KinstaLayout.vue\";\n\ndefineProps({\n    article: Object,\n});\n&lt;\/script&gt;\n\n&lt;template&gt;\n    &lt;KinstaLayout&gt;\n        &lt;article class=\"mx-auto mt-10 flex justify-center max-w-5xl border-b-2\"&gt;\n            &lt;img\n                src=\"\/images\/kinsta-logo.png\"\n                class=\"w-80 h-80 rounded-xl mx-auto py-5\"\n                alt=\"\"\n            \/&gt;\n            &lt;div class=\"text-left flex flex-col pt-5 pb-10 px-10\"&gt;\n                &lt;h1 class=\"text-xl font-semibold mb-10\"&gt;{{ article.title }}&lt;\/h1&gt;\n                &lt;p&gt;{{ article.body }}&lt;\/p&gt;\n            &lt;\/div&gt;\n        &lt;\/article&gt;\n    &lt;\/KinstaLayout&gt;\n&lt;\/template&gt;<\/code><\/pre>\n<p>Als we nu op de titel van het artikel of op &#8220;Read more&#8221; klikken, worden we op magische wijze naar <strong>Show.vue<\/strong> getransporteerd zonder de pagina te verversen.<\/p>\n<figure id=\"attachment_134671\" aria-describedby=\"caption-attachment-134671\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134671 size-large\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/kinsta-laravel-inertiajs-Link-1024x596.gif\" alt=\"De voorbeeld \"Kinsta Blog\" pagina met artikelkaarten met werkende links.\" width=\"1024\" height=\"596\"><figcaption id=\"caption-attachment-134671\" class=\"wp-caption-text\">Inertia op hun plaats.<\/figcaption><\/figure>\n<p>In ons geval gebruiken we <code>&lt;Link&gt;<\/code> als anchortag die een <code>GET<\/code> verzoek naar de route stuurt en de nieuwe gegevens terugstuurt, maar we kunnen <code>&lt;Link&gt;<\/code> gebruiken om ook <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> en <code>DELETE<\/code><\/p>\n<p>&#8220;routes\/<strong>web.php<\/strong>&#8220;:<\/p>\n<pre><code class=\"language-html\">&lt;Link href=\"\/logout\" method=\"post\" as=\"button\" type=\"button\"&gt;Logout&lt;\/Link&gt;<\/code><\/pre>\n<h2>Laravel Inertia tips en trucs die je moet weten<\/h2>\n<p>We hebben nu een werkende SPA gebouwd met Laravel, Inertia en Tailwind CSS. Maar Inertia kan ons helpen nog veel meer te bereiken. Het is tijd om ons enkele Inertia technieken eigen te maken die zowel de developers als de bezoekers van de applicatie zullen helpen.<\/p>\n<h3>URL&#8217;s genereren<\/h3>\n<p>Je hebt misschien gemerkt dat we namen hebben toegevoegd aan onze Laravel routes zonder die te gebruiken. Met Inertia kunnen we onze benoemde routes binnen onze componenten gebruiken in plaats van handmatig de volledige route op te schrijven.<\/p>\n<p>We kunnen dit bereiken door <a href=\"https:\/\/github.com\/tighten\/ziggy#installation\">het Ziggy pakket in ons project te installeren<\/a>:<\/p>\n<pre><code class=\"language-bash\">composer require tightenco\/ziggy<\/code><\/pre>\n<p>Ga nu naar &#8220;resources\/js\/app.js&#8221; en werk het als volgt bij:<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\n\ncreateInertiaApp({\n    title: (title) =&gt; `${title} - ${appName}`,\n    resolve: (name) =&gt;\n        resolvePageComponent(\n            `.\/Pages\/${name}.vue`,\n            import.meta.glob(\".\/Pages\/**\/*.vue\")\n        ),\n    setup({ el, app, props, plugin }) {\n        return createApp({ render: () =&gt; h(app, props) })\n            .use(plugin)\n            .use(ZiggyVue, Ziggy)\n            .mount(el);\n    },\n});<\/code><\/pre>\n<p>Ga naar &#8220;\/resources\/views\/<strong>app.blade.php<\/strong>&#8221; en werk de head bij met <code>@routes<\/code> directive:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n\n&lt;head&gt;\n    &lt;meta charset=\"utf-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n\n    <!-- Fetch project name dynamically -->\n    &lt;title inertia&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\n    <!-- Scripts -->\n    @routes\n    @vite('resources\/js\/app.js')\n    @inertiaHead\n&lt;\/head&gt;\n\n&lt;body class=\"font-sans antialiased\"&gt;\n    @inertia\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#8230;en ververs je NPM pakketten door op de onderstaande twee terminalcommando&#8217;s te klikken:<\/p>\n<pre><code class=\"language-bash\">npm install && npm run dev<\/code><\/pre>\n<p>Met dit pakket kunnen we routes met naam gebruiken binnen onze Inertia componenten, dus laten we naar <strong>Index.vue<\/strong> gaan en de oude handmatige route verwijderen en vervangen door de naam van de route, terwijl we de gegevens normaal doorgeven alsof we in onze controller zitten.<\/p>\n<p>We zullen dit vervangen door:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"'\/posts\/' + article.id\"&gt;\n   {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<p>&#8230;door dit:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"route('article.show', article.id)\"&gt;\n   {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<p>Dit geeft ons precies hetzelfde gedrag dat we hadden, maar het is developervriendelijker en buitengewoon handig als je route veel parameters verwacht.<\/p>\n<h3>Voortgangsindicatoren<\/h3>\n<p>Dit is een van de leukste eigenschappen van Inertia.js; omdat SPA een interactieve gebruikerservaring biedt, zou het een fantastische toevoeging zijn om voortdurend feedback te hebben of een verzoek aan het laden is. Dit kan worden bereikt door een aparte bibliotheek die Inertia aanbiedt.<\/p>\n<p>De &#8220;@inertiajs\/progress&#8221; bibliotheek is een wrapper rond <a href=\"https:\/\/ricostacruz.com\/nprogress\/\">NProgress<\/a> die conditioneel de laadindicatoren toont volgens Inertia events. Je hoeft niet echt te weten hoe dit achter de schermen werkt, dus laten we het gewoon aan de praat krijgen.<\/p>\n<p>We kunnen deze bibliotheek installeren met het onderstaande terminal commando:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/progress<\/code><\/pre>\n<p>Als hij eenmaal ge\u00efnstalleerd is, moeten we hem importeren in &#8220;<strong>resources\/js\/app.js<\/strong>&#8221;<\/p>\n<pre><code class=\"language-js\">import \".\/bootstrap\";\nimport \"..\/css\/app.css\";\n\nimport { createApp, h } from \"vue\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\nimport { InertiaProgress } from \"@inertiajs\/progress\";\n\ncreateInertiaApp({\n    title: (title) =&gt; `${title} - ${appName}`,\n    resolve: (name) =&gt;\n        resolvePageComponent(\n            `.\/Pages\/${name}.vue`,\n            import.meta.glob(\".\/Pages\/**\/*.vue\")\n        ),\n    setup({ el, app, props, plugin }) {\n        return createApp({ render: () =&gt; h(app, props) })\n            .use(plugin)\n            .use(ZiggyVue, Ziggy)\n            .mount(el);\n    },\n});\n\nInertiaProgress.init({ color: \"#000000\", showSpinner: true });<\/code><\/pre>\n<p>Dit toont een laadbalk en een laadspinner in zwarte kleur, maar we kunnen de kleur veranderen samen met andere nuttige opties die te vinden zijn in de <a href=\"https:\/\/inertiajs.com\/progress-indicators\">documentatie over de voortgangsindicator van Inertia.js<\/a>.<\/p>\n<figure id=\"attachment_134672\" aria-describedby=\"caption-attachment-134672\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134672 size-large\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Inertia-progress-indicator-1024x83.gif\" alt=\"De blauwe \"Kinsta Blog\" header met de draaiende indicator rechtsboven.\" width=\"1024\" height=\"83\"><figcaption id=\"caption-attachment-134672\" class=\"wp-caption-text\">De Inertia voortgangsindicator (rechtsboven).<\/figcaption><\/figure>\n<h3>Scrollbeheer<\/h3>\n<p>In sommige gevallen wil je naar een nieuwe pagina navigeren terwijl je dezelfde scrollpositie behoudt. Misschien heb je dit nodig als je gebruikers toestaat comments achter te laten; dit zal een formulier verzenden en het nieuwe comment uit de database in je component laden; je wilt dat dit gebeurt zonder dat de gebruiker zijn scrollpositie verliest. Inertia regelt dit voor ons.<\/p>\n<p>In ons geval passen we dit toe op onze <code>&lt;Link&gt;<\/code> tag in <strong>Index.vue<\/strong>. Om de scrollpositie te behouden bij het doorsturen naar een andere pagina met Inertia&#8217;s <code>&lt;Link&gt;<\/code> hoeven we alleen maar het attribuut <code>preserve-scroll<\/code> toe te voegen aan de <code>&lt;Link&gt;<\/code>:<\/p>\n<pre><code class=\"language-html\">&lt;Link :href=\"route('article.show', article.id)\" preserve-scroll&gt;\n  {{ article.title }}\n&lt;\/Link&gt;<\/code><\/pre>\n<h2>SEO tips<\/h2>\n<p>Sinds het ontstaan van SPA&#8217;s maken mensen zich zorgen over search engine optimization (SEO). Het is algemeen bekend dat als je de SPA aanpak gebruikt, zoekmachines het moeilijk zullen hebben om je webapplicatie te crawlen omdat alles clientside wordt gerenderd, met als gevolg dat je website niet bovenaan de zoekresultaten verschijnt; hoe komt het toch dat die populaire platforms als Facebook en Github nu SPA&#8217;s zijn en nog steeds goed presteren in SEO?<\/p>\n<p>Nou, dit is geen mission impossible meer. Inertia biedt een paar oplossingen om je SPA SEO vriendelijk te maken.<\/p>\n<h3>Inertia Vue SSR met Laravel en Vite<\/h3>\n<p>Zoekmachines zoeken altijd naar HTML op je website om de content te identificeren; maar als je geen HTML in je URL&#8217;s hebt, wordt deze taak moeilijker. Als je SPA&#8217;s ontwikkelt, heb je op je pagina alleen JavaScript en JSON. Inertia introduceerde een Server-Side Rendering (SSR) feature die je aan je applicatie kunt toevoegen. Hiermee kan je app een eerste pagina op de server renderen en vervolgens de gerenderde HTML naar de browser sturen. Hierdoor kunnen gebruikers je pagina&#8217;s zien en ermee werken voordat ze volledig geladen zijn, en het heeft ook andere voordelen, zoals het verkorten van de tijd die zoekmachines nodig hebben om je site te indexeren.<\/p>\n<p>Om samen te vatten hoe het werkt, zal Inertia identificeren of het draait op een Node.js server en de componentnamen, properties, URL, en assets versie renderen naar HTML. Dit geeft de gebruiker en de zoekmachine praktisch alles wat je pagina te bieden heeft.<\/p>\n<p>Omdat we te maken hebben met Laravel heeft dit echter weinig zin, omdat Laravel een PHP framework is en niet draait op een Node.js server. Daarom sturen we het verzoek door naar een Node.js service, die de pagina rendert en HTML teruggeeft. Dit zal onze Laravel Vue applicatie standaard SEO vriendelijk maken.<\/p>\n<p>Eerst moeten we het Vue.js SSR npm pakket installeren:<\/p>\n<pre><code class=\"language-bash\">npm install @vue\/server-renderer<\/code><\/pre>\n<p>Een ander nuttig Inertia &#8220;NPM&#8221; pakket biedt een eenvoudige &#8220;HTTP&#8221; server. Het wordt sterk aanbevolen om het te installeren:<\/p>\n<pre><code class=\"language-bash\">npm install @inertiajs\/server<\/code><\/pre>\n<p>Vervolgens voegen we in &#8220;resources\/js\/&#8221; een nieuw bestand toe met de naam <strong>ssr.js<\/strong>. Dit bestand lijkt sterk op het <strong>app.js<\/strong> bestand dat we maakten bij de installatie van Inertia, alleen wordt het uitgevoerd in Node.js in plaats van in de browser:<\/p>\n<pre><code class=\"language-js\">import { createSSRApp, h } from \"vue\";\nimport { renderToString } from \"@vue\/server-renderer\";\nimport { createInertiaApp } from \"@inertiajs\/inertia-vue3\";\nimport createServer from \"@inertiajs\/server\";\nimport { resolvePageComponent } from \"laravel-vite-plugin\/inertia-helpers\";\nimport { ZiggyVue } from \"..\/..\/vendor\/tightenco\/ziggy\/dist\/vue.m\";\n\nconst appName = \"Laravel\";\n\ncreateServer((page) =&gt;\n    createInertiaApp({\n        page,\n        render: renderToString,\n        title: (title) =&gt; `${title} - ${appName}`,\n        resolve: (name) =&gt;\n            resolvePageComponent(\n                `.\/Pages\/${name}.vue`,\n                import.meta.glob(\".\/Pages\/**\/*.vue\")\n            ),\n        setup({ app, props, plugin }) {\n            return createSSRApp({ render: () =&gt; h(app, props) })\n                .use(plugin)\n                .use(ZiggyVue, {\n                    ...page.props.ziggy,\n                    location: new URL(page.props.ziggy.location),\n                });\n        },\n    })\n);<\/code><\/pre>\n<p>Zorg ervoor dat je niet alles in het <strong>ssr.js<\/strong> bestand opneemt, omdat het niet zichtbaar zal zijn voor bezoekers; dit bestand is alleen bedoeld voor zoekmachines en browsers om de gegevens binnen je pagina te tonen, dus neem alleen op wat belangrijk is voor je gegevens of alleen wat je gegevens beschikbaar maakt.<\/p>\n<p>&#8220;Standaard werkt de SSR server van Inertia op poort 13714. Je kunt dit echter veranderen door een tweede argument te geven aan de createServer methode.&#8221; Inertia DOCss.<\/p>\n<p>De Inertia.js DOCs leggen niet uit hoe je Inertia SSR met Vite kunt integreren, maar we zullen dit nu doornemen. Ga naar <strong>vite.config.js<\/strong> en plak het onderstaande:<\/p>\n<pre><code class=\"language-js\">import { defineConfig } from \"vite\";\nimport laravel from \"laravel-vite-plugin\";\nimport vue from \"@vitejs\/plugin-vue\";\n\nexport default defineConfig({\n    plugins: [\n        laravel({\n            input: \"resources\/js\/app.js\",\n            ssr: \"resources\/js\/ssr.js\",\n        }),\n        vue({\n            template: {\n                transformAssetUrls: {\n                    base: null,\n                    includeAbsolute: false,\n                },\n            },\n        }),\n    ],\n});<\/code><\/pre>\n<p>Ga vervolgens naar <strong>package.json<\/strong> en verander het build script:<\/p>\n<pre><code class=\"language-json\">\"build\": \"vite build && vite build --ssr\"<\/code><\/pre>\n<p>Als we nu <code>npm run build<\/code> uitvoeren, zal Vite onze SSR bundel bouwen voor productie. Voor meer informatie hierover kun je <a href=\"https:\/\/inertiajs.com\/server-side-rendering\">Inertia SSR DOCs<\/a> en <a href=\"https:\/\/laravel-vite.dev\/guide\/features\/ssr.html#building\">Vite SSR DOCs<\/a> bezoeken.<\/p>\n<h3>Title en meta<\/h3>\n<p>Omdat JavaScript applicaties worden weergegeven binnen de <code>&lt;body&gt;<\/code> van het document, kunnen ze geen markup weergeven op de <code>&lt;head&gt;<\/code> van het document, omdat dit buiten hun bereik valt. Inertia heeft een <code>&lt;Head&gt;<\/code> component die gebruikt kan worden om de pagina <code>&lt;title&gt;<\/code>, <code>&lt;meta&gt;<\/code> tags en andere <code>&lt;head&gt;<\/code> componenten in te stellen.<\/p>\n<p>Om een <code>&lt;head&gt;<\/code> element aan je pagina toe te voegen, moeten we <code>&lt;Head&gt;<\/code> importeren uit Inertia, net zoals we deden met de <code>&lt;Link&gt;<\/code> component:<\/p>\n<pre><code class=\"language-js\">import { Head } from '@inertiajs\/inertia-vue3'\n\n&lt;Head&gt;\n  &lt;title&gt;Kinsta Blog&lt;\/title&gt;\n  &lt;meta name=\"description\" content=\"Kinsta blog for developers\"&gt;\n&lt;\/Head&gt;<\/code><\/pre>\n<p>We kunnen ook een globale titel toevoegen voor alle pagina&#8217;s, dit zal je applicatienaam toevoegen naast de titel op elke pagina. Dat hebben we al gedaan in het <strong>app.js<\/strong> bestand:<\/p>\n<pre><code class=\"language-js\">createInertiaApp({\n    title: (title) =&gt; `${title} - ${appName}`,\n    \/\/\n});<\/code><\/pre>\n<p>Wat betekent dat als we in de homepage van onze applicatie <code>&lt;Head title=\"Home\"&gt;<\/code> toevoegen met een titel, dit als volgt wordt weergegeven: <code>&lt;title&gt;Home - My App&lt;\/title&gt;<\/code>.<\/p>\n<h3>Het monitoren van je app<\/h3>\n<p>Snelheid is een van de belangrijkste factoren bij het optimaliseren van de SEO prestaties op je website. Als je WordPress gebruikt voor je website, helpt <a href=\"https:\/\/kinqsta.com\/nl\/apm-tool\/\">Kinsta APM<\/a> je om die reden bij het bewaken en goed in de gaten houden van je applicatie in actie. Het helpt je WordPress prestatieproblemen te identificeren en is gratis beschikbaar op alle door Kinsta gehoste sites.<\/p>\n<h2>Samenvatting<\/h2>\n<p>Inertia.js is een van de belangrijkste technologie\u00ebn die je tegenwoordig kan gebruiken; combineer het met Laravel en je hebt een moderne Single-Page applicatie gebouwd met PHP en JavaScript. Taylor Otwell, de bedenker van Laravel, is zo ge\u00efnteresseerd in Inertia dat Laravel zijn populairste starterkits, Laravel Breeze en Jetstream, heeft gelanceerd met ondersteuning voor Inertia en SSR.<\/p>\n\n<p>Als je een Laravel fan bent of een professionele developer, Inertia.js zal ongetwijfeld je aandacht trekken. In deze tutorial hebben we in een paar minuten een heel eenvoudige en simpele blog gemaakt. Er valt nog genoeg te leren over Inertia, en dit kan zomaar pas de eerste van vele artikelen en tutorials zijn.<\/p>\n<p>Wat zou je nog meer over Laravel willen ontdekken? Laat het ons weten in de commentsectie hieronder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Multi-page applicaties (MPA&#8217;s) worden met de dag minder populair. Bekende platforms als Facebook, Twitter, YouTube, Github, en vele andere gebruiken in plaats daarvan al geruime tijd &#8230;<\/p>\n","protected":false},"author":266,"featured_media":48466,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[793,431,368,809,810],"topic":[866],"class_list":["post-48465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-inertia-js","tag-javascript","tag-laravel","tag-php-frameworks","tag-spa","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Zo gebruik je Inertia.js in je Laravel projecten - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zo gebruik je Inertia.js in je Laravel projecten\" \/>\n<meta property=\"og:description\" content=\"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-12T15:18:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-30T13:20:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mostafa Said\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mostafa Said\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\"},\"author\":{\"name\":\"Mostafa Said\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\"},\"headline\":\"Zo gebruik je Inertia.js in je Laravel projecten\",\"datePublished\":\"2022-12-12T15:18:54+00:00\",\"dateModified\":\"2023-06-30T13:20:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\"},\"wordCount\":3954,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\",\"keywords\":[\"inertia.js\",\"JavaScript\",\"laravel\",\"php frameworks\",\"spa\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\",\"url\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\",\"name\":\"Zo gebruik je Inertia.js in je Laravel projecten - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\",\"datePublished\":\"2022-12-12T15:18:54+00:00\",\"dateModified\":\"2023-06-30T13:20:19+00:00\",\"description\":\"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinqsta.com\/nl\/onderwerpen\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Zo gebruik je Inertia.js in je Laravel projecten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#website\",\"url\":\"https:\/\/kinqsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996\",\"name\":\"Mostafa Said\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g\",\"caption\":\"Mostafa Said\"},\"description\":\"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.\",\"url\":\"https:\/\/kinqsta.com\/nl\/blog\/author\/mostafasaid\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Zo gebruik je Inertia.js in je Laravel projecten - Kinsta\u00ae","description":"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/","og_locale":"nl_NL","og_type":"article","og_title":"Zo gebruik je Inertia.js in je Laravel projecten","og_description":"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.","og_url":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2022-12-12T15:18:54+00:00","article_modified_time":"2023-06-30T13:20:19+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","type":"image\/png"}],"author":"Mostafa Said","twitter_card":"summary_large_image","twitter_description":"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.","twitter_image":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","twitter_creator":"@Kinsta_NL","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Mostafa Said","Geschatte leestijd":"24 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/"},"author":{"name":"Mostafa Said","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996"},"headline":"Zo gebruik je Inertia.js in je Laravel projecten","datePublished":"2022-12-12T15:18:54+00:00","dateModified":"2023-06-30T13:20:19+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/"},"wordCount":3954,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","keywords":["inertia.js","JavaScript","laravel","php frameworks","spa"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/","url":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/","name":"Zo gebruik je Inertia.js in je Laravel projecten - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","datePublished":"2022-12-12T15:18:54+00:00","dateModified":"2023-06-30T13:20:19+00:00","description":"In dit artikel onderzoeken we hoe je Inertia.js naast Laravel, Vue en Tailwind CSS kunt gebruiken om een moderne web-app te maken.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#primaryimage","url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","contentUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/12\/laravel-inertia.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/nl\/blog\/laravel-inertia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinqsta.com\/nl\/onderwerpen\/laravel\/"},{"@type":"ListItem","position":3,"name":"Zo gebruik je Inertia.js in je Laravel projecten"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/nl\/#website","url":"https:\/\/kinqsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinqsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/e96baff25a5ee7e63a525f9557f79996","name":"Mostafa Said","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/96bb303b019e8ddbdbaea885a36fee51?s=96&d=mm&r=g","caption":"Mostafa Said"},"description":"I\u2019m Mostafa, a full-stack developer with a knack for all things Laravel, Inertia, and JavaScript frameworks. When I'm not coding, you can find me sharing my knowledge through tutorials, diving into hackathons (and winning a few), and spreading the love for tech by teaching what I've learned.","url":"https:\/\/kinqsta.com\/nl\/blog\/author\/mostafasaid\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/comments?post=48465"}],"version-history":[{"count":16,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48465\/revisions"}],"predecessor-version":[{"id":52880,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48465\/revisions\/52880"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48465\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/media\/48466"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/media?parent=48465"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/tags?post=48465"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/topic?post=48465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}