You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ziggy路由在Laravel Inertia SSR中出现读取未定义属性错误如何解决?

Laravel Inertia SSR 启动时出现 Cannot read properties of undefined (reading 'sounds.categories') 错误

运行php artisan inertia:start-ssr启动服务端渲染(SSR)时,控制台抛出如下错误:

TypeError: Cannot read properties of undefined (reading 'sounds.categories')
    at new N (file:///F:/Projects/laravel.site.ir/bootstrap/ssr/ssr.js:2102:25)
    at Proxy.T (file:///F:/Projects/laravel.site.ir/bootstrap/ssr/ssr.js:2203:14)
    at _sfc_ssrRender (file:///F:/Projects/laravel.site.ir/bootstrap/ssr/assets/Index-d177b86d.js:119:21)
    at renderComponentSubTree (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:695:9)
    at renderComponentVNode (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:641:12)
    at renderVNode (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:755:14)
    at renderComponentSubTree (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:710:7)
    at renderComponentVNode (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:641:12)
    at renderVNode (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:755:14)
    at renderComponentSubTree (F:\Projects\laravel.site.ir\node_modules\@vue\server-renderer\dist\server-renderer.cjs.js:710:7)

已知sounds.categories已正确定义,非SSR环境运行正常,使用ziggy-js作为路由插件,以下是可行的解决方案:

1. 确认服务端数据预加载逻辑

SSR渲染依赖服务端提前注入数据,需确保路由/控制器中已将sounds数据传递给Inertia页面:

// 示例控制器代码
return Inertia::render('Index', [
    'sounds' => [
        'categories' => SoundCategory::query()->get(),
        // 其他关联数据
    ],
]);

检查返回的Inertia响应是否包含完整的sounds对象,避免客户端异步请求数据导致SSR渲染时数据缺失。

2. 修正组件数据获取方式

避免在组件中依赖客户端全局变量(如window)获取sounds数据,改用Inertia props传递:

<script setup>
const props = defineProps({
    sounds: {
        type: Object,
        required: true,
    },
});
</script>

<template>
    <!-- 直接使用 props.sounds.categories -->
    <div v-for="category in props.sounds.categories" :key="category.id">
        {{ category.name }}
    </div>
</template>

3. 配置ziggy-js适配SSR环境

ziggy-js在SSR环境中需要全局初始化,修改ssr.js文件:

import { Ziggy } from './ziggy';
import { route } from 'ziggy-js';

// 为SSR全局挂载ziggy方法和配置
globalThis.route = route;
globalThis.Ziggy = Ziggy;

同时运行php artisan ziggy:generate生成最新的路由配置文件,确保SSR构建时能获取正确的路由数据。

4. 添加数据兜底判断

在组件中对sounds及下属字段添加空值保护,避免SSR渲染时因数据未就绪报错:

<template>
    <div v-if="sounds?.categories">
        <!-- 仅当数据存在时渲染内容 -->
    </div>
</template>

或在props中设置默认值:

const props = defineProps({
    sounds: {
        type: Object,
        required: false,
        default: () => ({ categories: [] }),
    },
});

5. 清理SSR构建缓存

删除bootstrap/ssr目录下的旧构建文件,重新执行:

npm run build
php artisan inertia:start-ssr

确保使用最新的组件代码和数据逻辑进行SSR渲染。

内容的提问来源于stack exchange,提问作者MehranRJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:20:09