如何让Preact Signals的effect仅响应指定Signal的变化?
解决方案
方法一:使用watch API(推荐)
Vue的watch API天生对应React useEffect带依赖数组的场景,专门用于监听特定数据源的变化并执行回调:
watch(shoes, (newShoesValue) => { productsShoes.value = newShoesValue })
这里直接监听shoes响应式对象,只有当它的值发生变化时,回调才会执行,完全匹配你想要的效果。
方法二:调整effect的依赖追踪(若必须使用effect)
如果一定要基于effect实现,需确保effect内部仅访问shoes.value,避免意外追踪其他响应式依赖。如果你的代码已经只访问shoes.value但仍有多余触发,可能是productsShoes被其他地方修改导致的误触发,此时可以手动明确依赖:
effect(() => { const currentShoes = shoes.value productsShoes.value = currentShoes })
不过这种写法本质和你原代码一致,若仍存在多余执行,建议排查是否有其他地方意外修改了effect追踪的依赖,此时更推荐用watch来精准控制。
内容的提问来源于stack exchange,提问作者Vinicius Lima
相关产品推荐
相关产品推荐

