【Vue3】watch的几种用法

1.监听一个ref属性的变化

let num = ref(1);
watch(num,(newvalue,oldvalue)=>{
	console.log(newvalue,olavalue);
})

2.加入配置项(立刻监听)

let num = ref(1);
watch(num,(newvalue,oldvalue)=>{
	console.log(newvalue,olavalue);
}{immediate:true})

3.监听多个ref属性的变化

let num1 = ref(1);
let num2 = ref(1);
watch([num1,num2],(newvalue,oldvalue)=>{
	console.log(newvalue,olavalue);
})

3.监听reactive定义对象的变化

const student = reactive({
       name:'张三',
       age:20,
       a:{
           b:{
               salary:'20k'
           }
       }
  })
function changeName(){
    student.name = student.name + '@'
}
function changeAge(){
    student.age ++
}
function changeSalary(){
    student.a.b.salary = "50k"
}
watch(student,(newV,oldV)=>{
    console.log(newV,oldV);
})

vue3默认开启深度监听,且设置deep:false无效
ractive定义的响应式数据无法正确获取到oldV的值

4.监听reactive定义的对象中的某个属性的变化

//上方代码watch改写为
watch(()=>student.name,(newValue,oldValue)=>{
    console.log(newValue,oldValue);
})

监听对象的某个属性需要将watch函数的第一个参数写为一个函数需要监听的属性作为返回值,可以正确的获得oldValue。

5.监听reactive定义的对象中的某些属性的变化

//watch改写为
watch([()=>student.name,()=>student.age],(newValue,oldValue)=>{
    console.log(newValue,oldValue);
})

可以正确的获得oldValue

6.监听reactive定义的对象中的嵌套很深的属性的变化

const student = reactive({
  a: {
    b: {
      salary: "20k",
    },
  },
});
function changeSalary() {
  student.a.b.salary = "10k";
}
watch(
  () => student.a,
  (newValue, oldValue) => {
    console.log(newValue, oldValue);
  },
  { deep: true }
);

此时需要开启深度监视才能监视到属性值的变化,且此时oldValue失效。

总结

1.对于监视reactive定义的响应式数据,oldValue无法正确获取到,且默认开启深度监视,deep属性失效
2.监视reactive定义的某个指定的响应式数据。oldValue可以正确获取到,且deep属性可以正常使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打代码能当饭吃?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值