watch 和 watchEffect 的区别

在 Vue 3 中,watchwatchEffect 都是 Composition API 的一部分,用于观察组件中响应式数据的变化并执行副作用。尽管它们的功能相似,但在使用方式和行为上存在一些关键的区别:

watch

  1. 显式依赖watch 需要明确指定它要监听的数据源(响应式引用或计算属性)。这可以是单个值或一个包含多个值的数组。

  2. 惰性执行watch 是惰性的,这意味着它不会在组件创建时立即执行,只有在监听的数据发生变化时才会执行回调。

  3. 回调参数watch 的回调函数可以接收两个参数:新值和旧值,这使得你可以比较变化前后的值。

  4. 取消监听:你可以通过调用返回的函数来停止 watch 的监听。

  5. 配置选项watch 可以接受一个配置对象,其中包括 immediate(立即执行回调)、deep(深度监听对象内部值的变化)等选项。

watchEffect

  1. 隐式依赖watchEffect 会在内部自动追踪其回调中访问的所有响应式属性,无需明确指定依赖。

  2. 立即执行watchEffect 会在组件创建时立即执行一次,以便收集其依赖项,之后每当依赖项发生变化时,它都会重新执行。

  3. 无回调参数watchEffect 的回调函数没有参数,因为它不关心具体哪个依赖项变化了,它只关心是否有依赖项变化。

  4. 不可取消watchEffect 没有提供取消监听的机制。

  5. 配置选项watchEffect 也接受一个配置对象,但通常不需要指定依赖,因此 deepimmediate 这样的选项并不常见。

总结

  • watch 更适合于你知道具体要监听哪些数据变化的情况,它提供了更多的控制,如比较新旧值、配置立即执行或深度监听。
  • watchEffect 更适合于你想要在多个数据变化时执行相同副作用的情况,不需要明确指定依赖项,但无法获取变化前后的值,也无法取消监听。

选择 watch 还是 watchEffect 取决于你的具体需求和场景。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值