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

Svelte5中从服务端向客户端传递数组的正确方法

Svelte5带自定义属性的数组服务端转客户端丢失问题解决

问题根源

你遇到的问题本质是给数组附加自定义属性不符合JSON规范。服务端渲染时,数据是在Node环境直接传递的对象,额外属性能保留;但服务端需要把数据序列化为JSON传给客户端,而JSON只认可数组的索引元素(影响length的部分),挂载在数组对象上的NoOfRecords、"L"这类非数字键属性会被直接丢弃,客户端最终拿到的就是length为0的空数组。

正确传递方式

不要给数组附加自定义属性,改用对象包裹数组与额外属性的结构,确保JSON序列化能完整保留所有数据。

修改后的代码示例:

+page.server.js

export async function load({ url, cookies }) {
    return { Tom: await setUpTom() }
}

async function setUpTom() {
    // 用对象封装数组和属性,替代给数组加属性的写法
    return {
        list: [], // 原psTom数组的内容
        NoOfRecords: 34,
        L: {
            list: [], // 原psTom["L"]数组的内容
            NoOfRecords: 4
        }
    };
}

+page.svelte

...
let pcTom = data.Tom;
// 访问对应数据:pcTom.list、pcTom.NoOfRecords、pcTom.L.list、pcTom.L.NoOfRecords
...

补充说明

JSON规范中,数组仅包含有序的索引元素,任何附加在数组对象上的非数字键属性都不属于JSON数组的合法结构,因此序列化过程中会被过滤。Svelte的服务端数据传递依赖JSON序列化,必须使用标准的对象/数组结构才能保证数据在服务端和客户端一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:30:00