Svelte中Store衍生数据的本地变量响应性问题咨询
Svelte Store 本地变量响应性问题解析
你的操作没有错误,核心是对Svelte响应式机制的理解差异导致的结果:
1. 直接赋值无响应的原因
当你执行 let answers = $questions 时,这只是一次性将$questions当前的快照值拷贝给answers。普通let声明的变量不具备Svelte的响应式追踪能力,Store后续更新时,Svelte不会自动重新执行赋值操作,所以answers不会同步更新。
2. 响应式声明生效的逻辑
使用Svelte的响应式语句 $: answers = $questions 时,Svelte会自动建立依赖追踪:
- 它会识别到这条语句依赖
$questions(Store的订阅值) - 每当
$questions因上游roundStore更新而重新计算时,Svelte会自动重新执行这条赋值语句,更新answers的值 - 最终实现
answers与$questions的响应式同步
代码对比示例
无响应的写法
<script> import { questions } from './stores.js'; // 仅初始赋值,后续questions更新时answers不会变化 let answers = $questions; </script>
响应式生效的写法
<script> import { questions } from './stores.js'; // 响应式绑定,随$questions自动更新 $: answers = $questions; </script>
补充说明
你的questions作为衍生Store,其值依赖round这个writable Store的变化。组件中的$questions本身已经是响应式的(自动订阅Store更新),但只有通过Svelte的响应式语句绑定到本地变量,才能让本地变量具备同步更新的能力——普通变量无法触发Svelte的重新渲染逻辑。
内容的提问来源于stack exchange,提问作者agmcleod
相关产品推荐
相关产品推荐

