首页 > 解决方案 > 一次订阅多个可写文件

问题描述

我有一个柜台

function createCountable(initValue: number, delta:number = 1) {
    const count = writable(initValue);

    return {
        value: count,
        inc: () => count.update(n => n + delta),
        dec: () => count.update(n => n - delta),
    };
}

和一家商店

function createStore() {
    const cycles = createCountable(4, 1)
    const cycleLength = createCountable(30, 5)

    let time: string = '00:00'

    //todo how to subscribe??

    return {
        cycles,
        cycleLength,
        time
    }
}

无论何时cyclescycleLength更新,我都想重新计算时间。如何在一项功能/一项订阅中处理此问题?

还是我应该重新设计商店的架构?

我有两个可写对象的原因是因为我喜欢用它的修改函数来封装这个值,以便维护,我也可以在我的更新函数中使用多态性。

标签: svelte

解决方案


你应该看看派生商店。我会这样写你的例子

const cycles = createCountable(5, 1);
const cycleLength = createCountable(30, 5);

const time = derived([cycles, cycleLength], ([$cycles, $cycleLength]) => {
    return "00:00" // do whatever you like here
})

然后在您的组件中,当您更新周期或周期长度时,$time 将自动更新。

我没有测试过,但我认为它有效

有关更多信息,请查看文档


推荐阅读