Vue3之watch的最简用法

watch用法

  • 参数一:要监测的值或值数组。(也可直接放入对象,不建议)
  • 参数二:回调函数。接收两个参数,newValue和oldValue。
  • 参数三:配置项对象。immediate、deep…

1、监测一个ref数据。

let sum = ref(0);
watch(sum, (newVal, oldVal) => {
     console.log('sum的值被改变了', oldVal + '==>' + newVal);
});

2、监测多个ref数据

let sum = ref(0),
	msg = ref('Hello World');
watch([sum, msg], (newVal, oldVal) => {
    if (oldVal[0] !== newVal[0])
        console.log('sum的值被改变了', oldVal[0] + '==>' + newVal[0]);
    if (oldVal[1] !== newVal[1])
        console.log('msg的值被改变了', oldVal[1] + '==>' + newVal[1]);
}, {
    immediate: true
});

3、监测reactive数据的多个属性

重点:使用Object.values()方法提取所有属性值并返回数组。

let person = reactive({
    name: '张三',
    age: 18,
    job: {
         plus: {
              	salary: 20
          }
    }
});
watch(() => Object.values(person), (newVal, oldVal) => {
      console.log('pseron对象发生改变', newVal, oldVal);
}, {
      deep: true,   // 这里如果不开启深度监视将监测不到salary属性
});

4、监测reactive数据的单个属性

let person = reactive({
    name: '张三',
    age: 18,
    job: {
         plus: {
              	salary: 20
          }
    }
});
watch(() => person.name, (newVal, oldVal) => {
      console.log('pseron对象发生改变', newVal, oldVal);
});

5、使用递归监测数据

function iter(obj) {
     Object.keys(obj).forEach(item => {
         if(obj[item] instanceof Object){
              iter(obj[item])
              return;
    }
    watch(() => obj[item], (newVal, oldVal) => {
            console.log(`pseron对象的${item}属性值发生变化`, newVal, oldVal);
   	 	})
    })
}
let person = reactive({
    name: '张三',
    age: 18,
    job: {
         plus: {
              	salary: 20
          }
    }
});
iter(person);

要是觉得非常有用的话,给孩子点个赞吧┭┮﹏┭┮

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值