vue3watch监听ref,reactive的注意事项

vue3中将数据变为响应式的方式有ref,reactive两种方式,ref主要是基本数据类型,reactive是将对象类型转为响应式数据

wacth属性在vue3中式一个函数,带有三个参数,第一个为想要监听的数据,第二个回调函数,第三个watch的配置

一:监听ref响应式的数据


       let sum = ref(1)
       let msg = ref("hhh")
        watch(
         // sum, //监听一个
            [sum,msg],  //监听多个
            (newValue, oldValue) => {
                console.log(newValue, oldValue) // 1 'hhh' undefined undefined
            },
            { immediate: true }   //立即监听属性
        )

二:监听reactive响应式的数据,需要注意几点


        let obj = reactive({
            name: "小猪妖",
            age: 12,
            job: {
                content: "砍柴"
            },
            a: {
                b: {
                     salary: 0.6,
                },
            },
        })
    //一:监听整个obj数据 此时的oldValue获取是有问题的,是vue3的一个bug,并且deep属性是强制开启
        watch(obj,(newValue,oldValue)=>{
             console.log(newValue,oldValue) 
            },{immediate:true,deep:true})  //此处配置deep属性无效果

    //二:监听obj中的某一个属性 此时监听的数据是需要调用的,否侧无效,且oldValue值正常获取
        watch(()=>obj.name,(newValue,oldValue)=>{
             console.log(newValue,oldValue)  //小乌鸦 undefined
            },{immediate:true}) 

    //三:监听obj中的多个属性 且oldValue值正常获取
        watch([()=>obj.name,()=>obj.age],(newValue,oldValue)=>{
             console.log(newValue,oldValue)  //小乌鸦 12 undefined undefined
            },{deep:false,immediate:true}) 
   //四:监听obj中的某一个属性且该属性的值为对象时,此时是需要开启deep的配置,否侧无法深度监听里面的数据,且获取的oldValue有问题 
        watch(obj.a,(newValue,oldValue)=>{
             console.log(newValue,oldValue)  //
            },{deep:false,immediate:true}) //此处配置deep属性
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值