Skip to main content

Cos’è Vue.js

Vue.js (di seguito “Vue”) è un framework JavaScript progressivo per costruire interfacce utente. “Progressivo” significa che puoi iniziare da parti piccole e aggiungere funzionalità quando servono: si adatta sia all’inserimento parziale in pagine HTML esistenti sia alla costruzione di SPA di grandi dimensioni. Il cuore di Vue è la reattività. Quando i dati cambiano, il DOM si aggiorna automaticamente, quindi non devi gestire manualmente “quando e quale elemento aggiornare”.
In questa pagina spieghiamo la combinazione di Vue 3 e Inertia v3. Lo starter kit di Laravel 13 usa questa configurazione per impostazione predefinita.

Options API e Composition API

Vue 3 offre due stili per scrivere i componenti: Options API e Composition API. Options API è lo stile tradizionale ereditato da Vue 2. Definisci il componente tramite un oggetto opzioni con data, methods, computed, mounted, ecc.
Composition API è lo stile introdotto in Vue 3. Combinandolo con la sintassi <script setup> puoi scrivere in modo più conciso. Ha una riusabilità della logica maggiore ed è particolarmente adatto a TypeScript.
Gli starter kit di Inertia × Laravel usano come standard lo stile Composition API con <script setup>. Anche gli esempi in questa pagina sono tutti in <script setup>.

Posizione in Laravel

Storia

Il rapporto tra Vue e Laravel è di lunga data e inizia con l’adozione di Vue come framework frontend predefinito in Laravel 5.3 (2016). All’epoca Vue era incluso in package.json ed era fornito anche il componente d’esempio resources/js/components/ExampleComponent.vue. Con Laravel 6 (2019) lo scaffold di autenticazione è stato scorporato nel pacchetto laravel/ui e anche lo scaffold Vue è passato a quel pacchetto. Attualmente lo stile principale è scegliere la configurazione Inertia + Vue tramite gli starter kit di laravel new. Per gli utenti Laravel, Vue è il framework JS più familiare, con risorse di apprendimento in molte lingue.

Stile principale attuale: Inertia × Vue

Il modo principale di usare Vue in Laravel è Inertia × Vue. Inertia realizza l’architettura “monolite moderno” che permette di passare dati dai controller Laravel direttamente ai componenti Vue senza progettare un’API.

Setup

Tramite starter kit (consigliato)

Per iniziare un nuovo progetto il modo più semplice è usare lo starter kit.
Se scegli Vue nel prompt interattivo, viene tutto configurato automaticamente.
  • inertiajs/inertia-laravel (adapter lato server)
  • @inertiajs/vue3 (adapter lato client)
  • vue (Vue 3)
  • @vitejs/plugin-vue (plugin Vite)
  • Middleware HandleInertiaRequests
  • Schermate di autenticazione (login, registrazione, ecc.) già implementate con Inertia + Vue

Installazione manuale

Per aggiungerlo a un progetto esistente, installa separatamente lato server e lato client.
Aggiungi poi il plugin Vue in vite.config.js.
Avvia l’app Inertia in resources/js/app.js.
Per i dettagli dell’installazione manuale (configurazione del template root, registrazione dei middleware, ecc.) consulta la documentazione ufficiale di Inertia.

Struttura delle directory

Negli starter kit i componenti pagina Vue vanno nella directory resources/js/pages/.
Scrivendo Inertia::render('Posts/Index', [...]), il componente corrispondente è resources/js/pages/Posts/Index.vue.

Sintassi dei template Vue

Ecco le direttive di template di base che servono per leggere e scrivere il codice degli starter kit.

{{ }} — espansione di variabili

Con le doppie parentesi graffe incorpori valori o espressioni JavaScript nel template.

v-if — condizionali

Corrisponde a {#if} di Svelte o all’operatore ternario di React.

v-for — rendering di liste

Specifica sempre :key per un aggiornamento differenziale efficiente. Corrisponde a Array.map() di React.

v-model — binding bidirezionale

Con v-model puoi sincronizzare bidirezionalmente il valore di un elemento form e una variabile reattiva.

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

  • :attr="value" — bind di un valore dinamico su un attributo HTML (forma abbreviata di v-bind:attr)
  • @event="handler" — registra un listener di evento (forma abbreviata di v-on:event)

Le basi del componente pagina

I componenti pagina di Inertia sono normali componenti Vue. I dati passati dal controller Laravel arrivano come props.

Controller

Componente pagina Vue

Basta dichiarare le props con defineProps() per usare nel template i dati passati dal controller. Non serve definire un’API REST.
Usando il componente <Link> di @inertiajs/vue3, le transizioni avvengono via XHR ed eviti il full reload del browser.
Si scrive come un normale tag <a>, ma dietro le quinte Inertia sostituisce solo il componente di pagina, dando una sensazione da SPA.

Componente Form

Il componente <Form> fornito da @inertiajs/vue3 è lo stile consigliato usato dagli starter kit per l’invio dei form. Specifichi action e method come props e accedi a errors e processing tramite v-slot.

Uso di base

v-slot="{ errors, processing }" è la sintassi di scoped slot di Vue; il componente Form calcola e passa automaticamente questi valori. Ai campi si assegna l’attributo HTML nativo name invece di v-model, così funziona la raccolta standard dei dati del browser.

Pattern degli starter kit

Gli starter kit gestiscono le rotte come oggetti tramite Wayfinder. store.form() restituisce un oggetto contenente action e method dell’oggetto rotta e viene passato a <Form> con v-bind.
I campi specificati in reset-on-success vengono ripristinati automaticamente in caso di invio riuscito. Utile per campi come la password che vuoi svuotare dopo l’invio.
Se non usi Wayfinder puoi passare direttamente l’URL come action="/login" e funziona allo stesso modo.

Helper useForm

Per la gestione dei form usa l’helper useForm di @inertiajs/vue3. Puoi implementare in modo semplice gestione stato, invio ed errori di validazione.

Lato controller

Componente form Vue

Ecco le principali proprietà restituite da useForm. Quando arrivano errori di validazione, useForm mantiene i contenuti inseriti mostrando gli errori. In combinazione con v-model offre un’esperienza di form senza interruzioni.

Dati condivisi (Shared Data)

I dati necessari a tutte le pagine (utente loggato, messaggi flash, ecc.) si definiscono nel metodo share() del middleware HandleInertiaRequests.
Per accedere ai dati condivisi da un componente Vue usa usePage().
Poiché i dati condivisi sono inclusi in ogni richiesta, si consiglia di limitarli allo stretto necessario. Con valutazioni lazy tramite fn(), vengono valutati solo quando ci si accede davvero.

Basi della reattività di Vue 3

Ecco le API di reattività di Vue 3 essenziali per sviluppare con Inertia × Vue.

ref — valore reattivo primitivo

computed — proprietà calcolate

onMounted — elaborazioni dopo il mount


Conclusioni

Vue.js ha una grande affinità con Laravel e dà il meglio nell’architettura “monolite moderno” tramite Inertia. Con Inertia × Vue ottieni sia la semplicità del backend Laravel sia la UI reattiva di Vue. Creando il progetto tramite starter kit, puoi iniziare subito con schermate di autenticazione incluse.

Documentazione ufficiale di Inertia.js

Per tutte le funzionalità di Inertia v3 consulta la documentazione ufficiale.
Ultima modifica il 13 luglio 2026