Vue3中的watch

今天继续和大家一起探讨在Vue3中的CompositionAPI中,是如何处理watch的,我们先看一段针对基础数据类型数据的编码方式

const app = Vue.createApp({    setup(){        const { ref,watch } = Vue        const name = ref('lilei')        // 具有惰性        // 可以拿到当前值和之前的值        watch(name, (currentVal,preVal) => {            console.log(currentVal,preVal)        })        return {name}    },    template: `<div>        Name:<input v-model="name" />        </div>        <div>Name is {{ name }}</div>`,    })const vm = app.mount("#root")

同样,我们也可以针对引用数据类型,就像这样

const app = Vue.createApp({    setup(){        const { reactive,watch } = Vue        const nameObj = reactive({name:'lilei'})        watch(() => nameObj.name, (currentVal,preVal) => {            console.log(currentVal,preVal)        })        return {nameObj}    },    template: `<div>        Name:<input v-model="nameObj.name" />        </div>        <div>Name is {{ nameObj.name }}</div>`,    })const vm = app.mount("#root")

当然,watch不仅仅可以监控单一的数据,也可以监控多个数据的变化,就像这样

const app = Vue.createApp({    setup(){        const { reactive,watch,toRefs } = Vue        const nameObj = reactive({name:'lilei',englishname:'hanmeimei'})                watch(() => nameObj.name, (currentVal,preVal) => {            console.log(currentVal,preVal)        })
        watch(() => nameObj.englishname, (currentVal,preVal) => {            console.log(currentVal,preVal)        })
        const {name,englishname} = toRefs(nameObj)        return {name,englishname}     },    template: `<div>        Name:<input v-model="name" />        </div>        <div>Name is {{ name }}</div>        <div>        EnglishName:<input v-model="englishname" />        </div>        <div>EnglishName is {{ englishname }}</div>`,    })const vm = app.mount("#root")

同样,我们的代码有一些啰嗦,当然,我们也可以简写成这样

const app = Vue.createApp({    setup(){        const { reactive,watch,toRefs } = Vue        const nameObj = reactive({name:'lilei',englishname:'hanmeimei'})        // 要注意回掉函数的参数顺序和代表意思        watch([() => nameObj.name,() => nameObj.englishname], ([curName,curNameEng],[preName,preNameEng]) => {            console.log(curName,preName)            console.log(curNameEng,preNameEng)        })
        const {name,englishname} = toRefs(nameObj)        return {name,englishname}     },    template: `<div>        Name:<input v-model="name" />        </div>        <div>Name is {{ name }}</div>        <div>        EnglishName:<input v-model="englishname" />        </div>        <div>EnglishName is {{ englishname }}</div>`,    })const vm = app.mount("#root")

大家还可以扫描二维码,关注我的微信公众号,蜗牛全栈。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

飞鹰3995

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

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

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

打赏作者

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

抵扣说明:

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

余额充值