vue3详解-watch与watchEffect的区别

vue3详解-watch与watchEffect的区别

前言

这次我来介绍一下vue3中的watch与watchEffect的区别,他们最大的区别是什么呢,没错,watchEffect比watch多6个字母。
在这里插入图片描述
开个玩笑,接下来将由我来为大家详细介绍一下他们的区别,watch 和 watchEffect 都是 Vue 3 Composition API 中用于响应式地观察和响应数据变化的函数,但它们在使用方式和行为上存在一些关键的区别。

watch

watch 函数允许你显式地指定要观察的数据源和相应的回调函数。你可以观察一个或多个响应式引用(ref)或计算属性(computed),并在它们变化时执行回调函数。

import { ref, watch } from 'vue';  
  
const count = ref(0);  
  
watch(count, (newValue, oldValue) => {  
  console.log(`Count changed from ${oldValue} to ${newValue}`);  
});  
  
// 也可以同时观察多个源  
watch([count, anotherRef], ([newCount, newAnother], [oldCount, oldAnother]) => {  
  // ...  
});

特点:

  • 你可以选择性地观察特定的响应式数据。
  • 回调函数接收新值和旧值作为参数,方便你比较变化。
  • watch 是惰性的,意味着它只会在数据源首次被观察时执行回调,之后只会在数据源变化时执行。
  • 你可以指定 deep 选项来深度观察对象的变化。
  • 你可以指定 immediate 选项来在观察开始时立即执行回调函数。

watchEffect

watchEffect 函数会自动收集依赖,并在依赖发生变化时重新运行函数。你不需要显式指定要观察的数据源,watchEffect 会自动追踪函数内部使用的响应式数据。

import { ref, watchEffect } from 'vue';  
  
const count = ref(0);  
const anotherCount = ref(0);  
  
watchEffect(() => {  
  console.log(`Count is ${count.value}, anotherCount is ${anotherCount.value}`);  
});  
  
// 当 count 或 anotherCount 任何一个变化时,上面的函数都会重新运行

特点:

  • watchEffect 会自动收集函数内部使用的响应式数据作为依赖。
  • 当依赖变化时,函数会自动重新运行。
  • 回调函数不接收新值和旧值作为参数,因为watchEffect不关注具体的值变化,而是重新运行函数以反映最新的状态。
  • watchEffect 是立即执行的,它会在创建时立即运行一次回调函数,并收集初始的依赖。
  • 由于它自动收集依赖,所以不适合用于需要精确控制依赖的场景。

区别总结

1、显式与隐式:watch 需要你显式指定要观察的数据源,而 watchEffect 则隐式地收集函数中的依赖。
2、参数传递:watch 的回调函数接收新值和旧值作为参数,而 watchEffect 的回调函数不接收这些参数。
3、执行时机:watch 是惰性的,除非指定了 immediate 选项,否则不会立即执行回调。watchEffect 则是立即执行的,创建时就会运行一次回调函数。
4、控制粒度:watch 允许你精确控制要观察哪些数据源,而 watchEffect 则更侧重于自动收集依赖,并在依赖变化时重新运行函数。
5、深度观察:使用 watch 时,如果需要深度观察对象的变化,需要显式设置 deep: true。而 watchEffect 会自动处理深度观察。

结语

在实际应用中,你可以根据具体需求选择使用 watch 还是 watchEffect。如果你需要精确控制观察哪些数据源,或者需要比较新旧值,那么 watch 可能更适合你。而如果你只是想在依赖变化时重新运行某个函数,并且不关心具体的值变化,那么 watchEffect 可能是一个更简洁的选择。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值