Vue 3 中 watchEffect 和 watch 的区别是什么?

· 约 3 分钟读完 · 第 204 / 211 章

推荐答案

在 Vue 3 中,watchEffect 和 watch 都是用于监听响应式数据变化的 API,但它们的使用场景和行为有所不同。

  • watchEffect:watchEffect 会自动追踪其回调函数中使用的响应式依赖,并在这些依赖发生变化时立即执行回调函数。它不需要显式指定要监听的数据源,适合用于处理副作用逻辑。

  • watch:watch 需要显式指定要监听的数据源,并且可以监听多个数据源。它提供了更细粒度的控制,允许你在数据变化时执行特定的回调函数,并且可以获取变化前后的值。

本题详细解读

watchEffect

  • 自动依赖追踪:watchEffect 会自动追踪回调函数中使用的所有响应式依赖,并在这些依赖发生变化时重新执行回调函数。
  • 立即执行:watchEffect 在首次调用时会立即执行一次回调函数。
  • 无返回值:watchEffect 没有返回值,通常用于处理副作用逻辑,如 DOM 操作、异步请求等。

watch

  • 显式依赖:watch 需要显式指定要监听的数据源,可以是单个响应式引用、计算属性或一个包含多个数据源的数组。
  • 变化前后值:watch 的回调函数可以接收变化前后的值,方便进行比较或处理。
  • 懒执行:watch 默认不会在首次调用时立即执行回调函数,除非设置 { immediate: true }。

总结对比

特性 watchEffect watch
依赖追踪 自动 显式指定
立即执行 是 可选(通过 { immediate: true })
变化前后值 无 有
适用场景 副作用逻辑 细粒度控制,需要变化前后值

通过以上对比,可以根据具体需求选择使用 watchEffect 或 watch。