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
相关产品推荐
相关产品推荐

