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

Svelte中derived store为何每次调用get()都会重新创建?

Svelte Derived Store 每次调用get()都会重新计算的问题

最近才意识到Svelte的derived store在每次调用get()时都会重新执行计算逻辑,而非仅当源store发生变化时才重新计算。更关键的是,如果存在链式关联的derived store,整个依赖树都会被遍历执行计算。

以下是示例代码:

<script>
import { derived, get, writable } from 'svelte/store'

const store = writable(0)
const derivedA = derived(store, s => {
  console.log('derivedA recreated!')
  return { name: 'A', s }
})
const derivedB = derived(derivedA, d => {
  console.log('derivedB recreated!')
  return {
    name: 'B',
    s: d.s
  }
})

function getB() {
  console.log(get(derivedB))
}
</script>

<section class="mx-4 md:mx-0">
  <button on:click={getB}>GetB</button>
</section>

我原本以为只有当输入源发生变化时,derived store才会重新生成值,而非每次调用get()的时候。曾误以为get()会返回值的引用(当然也清楚贸然修改这个引用会引发各种bug)。

虽然对于相同的输入,derived store理应返回完全相同的值,但如果开发者没有深入了解这一特性,错误地依赖“derived store仅在源store变化时重新计算”的认知,很可能会导致相当奇怪的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:26:03