inertia-link 点击无反应,主因是服务端未返回 Inertia 响应:须用 Inertia::render() 而非 view() 或 json(),且需注册 HandleInertiaRequests 中间件,响应头含 X-Inertia: true。

为什么 inertia-link 点击后页面没反应?
多数情况是服务端没正确返回 Inertia 响应,而不是前端配置问题。Laravel 必须用 Inertia::render() 返回页面,直接 return view() 或 return response()->json() 都会断开 Inertia 的接管链。
- 检查控制器方法是否以
Inertia::render('PageName', [...])结尾,而非view() - 确认中间件
\App\Http\Middleware\HandleInertiaRequests::class已注册在app/Http/Kernel.php的web组中 - 浏览器开发者工具 Network 标签页里,点击
inertia-link发出的请求响应头应包含X-Inertia: true;若没有,说明服务端未走 Inertia 渲染流程
Laravel 11+ 中 inertia-head 不生效怎么办?
新版 Inertia 默认禁用自动注入 title 和 meta,inertia-head 只负责渲染显式传入的内容,不会自动读取组件内的 usePage().props.title。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 在根布局(如
resources/js/Components/Layout.vue)中显式使用:<inertia-head :title="page.props.title" />
- 服务端传递 title 时需确保结构一致:
Inertia::render('Dashboard')->with('title', '仪表盘') - 若用
usePage().props.title动态更新,必须配合definePage的title选项,否则inertia-head无法感知变化
如何让 Laravel 的验证错误在 Inertia 页面中正确显示?
Inertia 默认会把 422 Unprocessable Entity 响应转为页面重载并保留输入值,但表单错误对象($errors)不会自动挂到 page.props.errors,需要手动桥接。
- 在控制器中,用
with('errors', $validator->errors())显式传递:Inertia::render('Auth/Login')->withErrors($request->validate([...])) - 前端 Vue 组件中通过
usePage().props.errors访问,字段名与表单 key 严格对应(如email、password) - 注意:Laravel 10+ 默认启用
Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull,空字符串会被转为null,可能干扰错误提示逻辑,必要时在表单提交前做预处理
SSR 渲染时 usePage() 报错 “Cannot read property 'props' of undefined”
这是 SSR 上下文里 page 尚未初始化导致的,常见于自定义布局或提前访问 usePage() 的 setup 函数中。
- 避免在
setup()顶层直接解构usePage(),改用onMounted(() => {...})或computed(() => usePage().props.xxx) - SSR 模式下,
usePage()返回的是一个响应式代理,但初始值为null,直到客户端 hydration 完成才填充真实数据 - 若必须服务端取值(如 SEO 相关 meta),应在服务端通过
with()显式传入,而非依赖usePage()在 SSR 中读取
X-Inertia,再查服务端是否真的走了 Inertia::render() —— 这两个点漏掉任何一个,整个链路就断了。

















