推荐答案
在 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
。