Client-side setup
Once you have your server-side framework configured, you then need to setup your client-side framework. Inertia currently provides support for React, Vue, and Svelte.
NOTE
You can skip this step if you have already executed the Rails generator.
Install dependencies
First, install the Inertia client-side adapter corresponding to your framework of choice.
npm install @inertiajs/vue3 vue
Initialize the Inertia app
Next, update your main JavaScript file to boot your Inertia app. To accomplish this, we'll initialize the client-side framework with the base Inertia component.
// frontend/entrypoints/inertia.js
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'
createInertiaApp({
resolve: (name) => {
const pages = import.meta.glob('../pages/**/*.vue', { eager: true })
return pages[`../pages/${name}.vue`]
},
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(plugin)
.mount(el)
},
})
The setup
callback receives everything necessary to initialize the client-side framework, including the root Inertia App
component.
Resolving components
The resolve
callback tells Inertia how to load a page component. It receives a page name (string), and returns a page component module. How you implement this callback depends on which bundler (Vite or Webpack) you're using.
// Vite
// frontend/entrypoints/inertia.js
createInertiaApp({
resolve: (name) => {
const pages = import.meta.glob('../pages/**/*.vue', { eager: true })
return pages[`../pages/${name}.vue`]
},
// ...
})
// Webpacker/Shakapacker
// javascript/packs/inertia.js
createInertiaApp({
resolve: (name) => require(`../pages/${name}`),
// ...
})
By default we recommend eager loading your components, which will result in a single JavaScript bundle. However, if you'd like to lazy-load your components, see our code splitting documentation.
Defining a root element
By default, Inertia assumes that your application's root template has a root element with an id
of app
. If your application's root element has a different id
, you can provide it using the id
property.
createInertiaApp({
id: 'my-app',
// ...
})