美文网首页
Vue3中的watch

Vue3中的watch

作者: 飞鹰3995 | 来源:发表于2021-11-08 22:21 被阅读0次

    今天继续和大家一起探讨在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")
    

    相关文章

      网友评论

          本文标题:Vue3中的watch

          本文链接:https://www.haomeiwen.com/subject/kqtpzltx.html