如何避免Svelte derived store异步调用在参数不变时重复执行?
解决方案
你的需求完全可以实现,无需手动维护额外的 writable store,依靠 Svelte 原生 derived store 的特性即可满足:
- 原生
derivedstore 自带依赖不变时缓存计算结果的能力:- 仅当
stationsData的订阅者数量从0变为1(即第一个使用它的组件挂载)时,才会执行你定义的异步派生逻辑,调用getValuesData发起请求 - 只要存在至少一个活跃订阅者,后续新组件挂载订阅
stationsData时,只要依赖的selectedParams没有发生变化,不会重新执行派生逻辑,直接返回已缓存的结果,不会重复发起请求
- 仅当
- 如果你需要支持「所有使用
stationsData的组件全部卸载后,再次挂载组件也不重复请求,只要selectedParams不变就复用旧结果」,仅需在 store 定义文件末尾添加一行空订阅即可:
stationsData.subscribe(() => {})
该空订阅会让
stationsData的订阅数永远至少为1,不会触发销毁逻辑,派生逻辑只会在selectedParams实际发生变更时才会重新执行,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Roger Veciana
相关产品推荐
相关产品推荐

