返回
创建于
状态
公开
哦~你说的是 Vue 3 里的 watchEffect,它和普通的 watch 有点区别 👍
区别回顾
-
watch需要指定明确的源(ref、reactive 或 getter),只有 依赖值真正发生变化 时才触发。 同值赋值(比如原本是1,又 set 为1)不会触发。-
watchEffect是一个「副作用收集器」,只要里面用到的响应式数据被“追踪”到更新,就会重新执行函数。 ⚠️ 注意:这里的“更新”指的是 setter 被调用,不要求新旧值不同。
举例说明
1import { ref, watch, watchEffect } from 'vue' 2 3const count = ref(1) 4 5// 普通 watch 6watch(count, (newVal, oldVal) => { 7 console.log('watch 触发:', newVal, oldVal) 8 }) 9 10 // watchEffect 11 watchEffect(() => { 12 console.log('watchEffect 执行, count:', count.value) 13 }) 14 ``` 15 16 执行: 17 18 ```js 19 count.value = 1 20 ``` 21 22 结果: 23 24 * `watch` 👉 **不会触发**(因为新旧值一样) 25 * `watchEffect` 👉 **会触发一次重新执行**(因为 setter 调用了,触发了依赖更新机制) 26 27 --- 28 29 ## 总结 30 31 * `watch`:新值 ≠ 旧值时触发 32 * `watchEffect`:**只要 set 了就触发**,不管值有没有变
-