SolidJS问题:使用createEffect监听signal变更失效
问题分析与解决:SolidJS createEffect未触发的原因
你的代码里count初始值为0,点击按钮执行doubleCount时,count() * 2的结果仍然是0——signal的值没有发生实际变更,因此SolidJS的响应式系统不会触发createEffect重新运行。
SolidJS的响应式机制基于值的严格相等性判断(===),只有当signal的新值与旧值不相等时,才会通知依赖它的effect、memo等执行更新逻辑。
修改方案
调整代码让count的值真正产生变化即可,比如:
- 改变更新逻辑,让每次点击递增数值:
const doubleCount = () => setCount(count() + 1);
- 或者保留翻倍逻辑,将
count的初始值设为非0数值:
const [count, setCount] = createSignal(1); const doubleCount = () => setCount(count() * 2);
这样每次点击按钮后,count的signal值都会发生变更,createEffect就会自动追踪到变化并执行日志打印操作。
内容的提问来源于stack exchange,提问作者WSD
相关产品推荐
相关产品推荐

