svelte - 一次订阅多个可写文件
问题描述
我有一个柜台
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
}
}
无论何时cycles
或cycleLength
更新,我都想重新计算时间。如何在一项功能/一项订阅中处理此问题?
还是我应该重新设计商店的架构?
我有两个可写对象的原因是因为我喜欢用它的修改函数来封装这个值,以便维护,我也可以在我的更新函数中使用多态性。
解决方案
你应该看看派生商店。我会这样写你的例子
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 将自动更新。
我没有测试过,但我认为它有效
有关更多信息,请查看文档。
推荐阅读
- javascript - 随机运行函数次数
- autohotkey - 通过 TelegramBot 发送消息的自动热键脚本不起作用
- java - 多个不同时间的春季调度
- javascript - TypeError:tasks.map 不是函数
- python - 如何配置 Sphinx 自动文档以记录 __init__.py 中的类?
- javascript - Puppeteer 获取所有href链接
- python - 是否有一种更简洁的方法来编写代码以在数据框中使用组均值有条件地替换异常值
- c# - 如何使用异步线程持续更新 GUI?
- reactjs - 反应JS | API 命中过程成功后如何获得响应?
- pine-script - 如何调用标题中包含空格字符的指标?