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
See Rails generator for a quick way to setup Inertia in your Rails application.
Install dependencies
First, install the Inertia client-side adapter corresponding to your framework of choice.
npm install @inertiajs/react react react-dom
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 { createInertiaApp } from '@inertiajs/react'
import { createElement } from 'react'
import { createRoot } from 'react-dom/client'
createInertiaApp({
resolve: (name) => {
const pages = import.meta.glob('../pages/**/*.jsx', { eager: true })
return pages[`../pages/${name}.jsx`]
},
setup({ el, App, props }) {
const root = createRoot(el)
root.render(createElement(App, props))
},
})
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/**/*.jsx', { eager: true })
return pages[`../pages/${name}.jsx`]
},
//...
})
// 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',
// ...
})