AgentSkillsCN

inertia

利用 Inertia.js 构建现代化的单体应用——无需搭建 API,即可将服务器端框架(Laravel、Rails 等)与 React/Vue/Svelte 前端相结合。适用于创建 Inertia 页面与布局、使用 Link 组件进行导航、通过 Form 组件或 useForm 钩子构建表单、处理校验与错误、管理共享数据与 Props、实施认证与授权、使用 router 进行手动访问、实现部分页面重新加载、设置持久化布局,或配置客户端侧的初始化设置。

SKILL.md
--- frontmatter
name: inertia
description: "Build modern monolith applications with Inertia.js - combining server-side frameworks (Laravel, Rails, etc.) with React/Vue/Svelte frontends without building APIs. Use when creating Inertia pages and layouts, working with Link component for navigation, building forms with Form component or useForm hook, handling validation and errors, managing shared data and props, implementing authentication and authorization, using manual visits with router, working with partial reloads, setting up persistent layouts, or configuring client-side setup."

Inertia.js

Modern monolith framework for building SPAs without APIs. Combine server-side framework power with React/Vue/Svelte frontends.

Core Concept

Inertia replaces your view layer - controllers return JavaScript page components instead of server-side templates. The <Link> component intercepts clicks for XHR visits, providing SPA experience without full page reloads.

Quick Reference

Basic Page Structure

vue
<script setup>
import Layout from './Layout'
import { Head } from '@inertiajs/vue3'
defineProps({ user: Object })
</script>

<template>
    <Layout>
        <Head title="Welcome" />
        <h1>Welcome {{ user.name }}</h1>
    </Layout>
</template>

Navigation

vue
<Link href="/users">Users</Link>
<Link href="/logout" method="post" as="button">Logout</Link>
<Link href="/search" :data="{ query }" preserve-state>Search</Link>

Form Submission

vue
<!-- Simple Form Component -->
<Form action="/users" method="post">
    <input type="text" name="name" />
    <button type="submit">Create</button>
</Form>

<!-- useForm Hook -->
<script setup>
import { useForm } from '@inertiajs/vue3'
const form = useForm({ name: '', email: '' })
function submit() { form.post('/users') }
</script>

Documentation by Topic

TopicReference FileDescription
Formsforms.mdForm component, useForm helper, validation, error handling
Links & Navigationlinks.mdLink component, manual visits, active states
Validationvalidation.mdServer-side validation, error bags, error display
Pages & Layoutspages-layouts.mdPage components, persistent layouts, default layouts
Data & Propsdata-props.mdShared data, partial reloads, deferred props
Authenticationauthentication.mdAuth patterns, CSRF protection, authorization
Setupsetup.mdClient-side initialization, server-side setup
Advancedadvanced.mdEvents, error handling, scroll management, SSR

Common Patterns

Displaying Validation Errors

vue
<div v-if="errors.email">{{ errors.email }}</div>

Accessing Shared Data

vue
<script setup>
import { usePage } from '@inertiajs/vue3'
const page = usePage()
const user = computed(() => page.props.auth?.user)
</script>

Preserving State/Scroll

vue
<Link href="/form" preserve-state preserve-scroll>Edit</Link>

Partial Reloads

vue
<Link :only="['users']">Refresh Users</Link>
router.visit('/users', { only: ['users'] })

Framework Support

  • Client: Vue 3 (@inertiajs/vue3), React (@inertiajs/react), Svelte (@inertiajs/svelte)
  • Server: Laravel (official), Rails, Phoenix, Symfony (community adapters)