返回
创建于
状态
公开

哦~你说的是 Vue 3 里的 watchEffect,它和普通的 watch 有点区别 👍


区别回顾

  • watch 需要指定明确的源(ref、reactive 或 getter),只有 依赖值真正发生变化 时才触发。 同值赋值(比如原本是 1,又 set 为 1)不会触发。

    • watchEffect 是一个「副作用收集器」,只要里面用到的响应式数据被“追踪”到更新,就会重新执行函数。 ⚠️ 注意:这里的“更新”指的是 setter 被调用,不要求新旧值不同。


      举例说明

      js
      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 了就触发**,不管值有没有变