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

Svelte中如何将readable store作为writable store的默认值?

问题解答

首先明确:Svelte的writable store完全支持存储复杂对象,你的问题不是类型支持的问题,而是访问readable store内部值的方式错了。

你直接写taskStore[0]拿不到有效数据,因为taskStore是Svelte store实例,不是普通数组,不能用下标直接访问它的内部数据。要获取store的当前值,有两种常用解决方式:

方案1:初始化时直接读取默认值

如果taskStore的初始值不会动态变化,或者你只需要用它的初始值初始化currentTaskStore,可以用Svelte提供的get函数读取store的当前值:

import { writable, readable, get } from "svelte/store";

export const taskStore = readable([ 
    {
        imageDir: '100159',
        frameCount: 50,
        labels: [
            { frame: 10, x: 125, y: 60 },
            { frame: 10, x: 125, y: 60 },
            { frame: 10, x: 125, y: 60 },
        ]
    },
    {
        imageDir: '100589', 
        frameCount: 50, 
        labels: []
    }
])

// 用get获取taskStore的当前值,再取第一个元素作为默认值
export const currentTaskStore = writable(get(taskStore)[0])

方案2:同步taskStore的动态变化

如果taskStore后续可能被更新(即便定义为readable,内部也可能有更新逻辑),需要currentTaskStore始终跟随taskStore的第一个元素变化,可以通过订阅taskStore实现:

import { writable, readable, get } from "svelte/store";

export const taskStore = readable([ 
    // 你的任务数据...
])

export const currentTaskStore = writable(get(taskStore)[0])

// 订阅taskStore,当值变化时更新currentTaskStore
taskStore.subscribe(tasks => {
    if (tasks.length > 0) {
        currentTaskStore.set(tasks[0])
    }
})

这样既能保证currentTaskStore的初始值正确,后续也能同步taskStore的变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:45:56