最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?CompositionAPI中watch和watchEffect的區(qū)別詳解

 更新時(shí)間:2023年06月19日 11:33:46   作者:一直酷下去  
這篇文章主要為大家詳細(xì)介紹了Vue?CompositionAPI中watch和watchEffect的區(qū)別,文中的示例代碼簡潔易懂,希望對大家學(xué)習(xí)Vue有一定的幫助

watch

偵聽一個(gè)數(shù)據(jù)

【例1: watch偵聽ref基礎(chǔ)類型的數(shù)據(jù)】

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

【例2: watch偵聽reactive類型的數(shù)據(jù)】

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

備注

  • watch具備一定的惰性 lazy (wath偵聽器首次加載不會執(zhí)行,只有數(shù)據(jù)發(fā)生變化才會執(zhí)行)
  • watch中的參數(shù)可以拿到原始值(回調(diào)函數(shù)的第一個(gè)參數(shù))和當(dāng)前值(回調(diào)函數(shù)的第二個(gè)參數(shù))
  • watch可以偵聽ref基礎(chǔ)類型的數(shù)據(jù),也可以對reactive類型的數(shù)據(jù)進(jìn)行監(jiān)聽(watch的第一個(gè)參數(shù)要寫成函數(shù)的形式,函數(shù)里面寫要監(jiān)聽值或?qū)ο蟮膶傩?

偵聽多個(gè)數(shù)據(jù)

例1

const app = Vue.createApp({
    setup() {
        const { reactive,watch,toRefs} = Vue;
        const nameObj = reactive({name:'LeBrown',englishname:'James'})
        watch([()=> nameObj.name,()=> nameObj.englishname],([curName,curEng],[prevName,prevEng]) => {
            console.log(curName,curEng);
            console.log(prevName,prevEng);
        })
        const {name,englishname} = toRefs(nameObj)
        return {name,englishname}
    },
    template: `
        <div>
          <div>
            Name: <input v-model="name"/>
          </div>
          <div>
            Name is: {{name}}
          </div>
          <div>
            EnglishName: <input v-model="englishname"/>
          </div>
          <div>
            Name is: {{englishname}}
          </div>
        </div>
    `
})
  const vm = app.mount('#root')

備注

watch可以偵聽多個(gè)數(shù)據(jù)的變化(watch的第一個(gè)參數(shù)是一個(gè)數(shù)組,第二個(gè)參數(shù)是一個(gè)函數(shù),函數(shù)的參數(shù)是數(shù)組),用一個(gè)偵聽器承載

watchEffect

例1

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

運(yùn)行結(jié)果

備注

  • watchEffect 會立即執(zhí)行 immediate,沒有惰性(wath偵聽器首次加載就執(zhí))
  • watchEffect發(fā)現(xiàn)偵聽器中的代碼對外部有依賴,就會對其進(jìn)行偵聽,如果依賴的值發(fā)生變化,就會執(zhí)行偵聽器中的代碼,也就是說它不需要傳遞你要偵聽的內(nèi)容,自動會感知代碼依賴,不需要傳遞很多參數(shù),只需要傳遞一個(gè)回調(diào)函數(shù)
  • watchEffect只能獲取到當(dāng)前的值,不能獲取到之前的值

總結(jié)

  • watchwatchEffect 都是具備偵聽能力的語法,但是在使用時(shí)還是有區(qū)別的。比如:在代碼中要寫ajax請求的時(shí)候,一般不會用到之前的數(shù)據(jù),只會用到當(dāng)前的數(shù)據(jù),結(jié)合當(dāng)前的數(shù)據(jù)發(fā)送請求,這種情況下使用watchEffect來發(fā)送ajax就比較合適
  • setup是純函數(shù),給固定的輸入就會有固定的輸出,但是涉及到異步請求或者定時(shí)器,輸出和輸入就不是純函數(shù),導(dǎo)致它不是純函數(shù)的異步請求叫Effect(副作用),因此從名字上看在處理異步的操作的時(shí)候,最好使用watchEffect

其他

取消偵聽器

const app = Vue.createApp({
    setup() {
        const { reactive,  watchEffect, toRefs } = Vue;
        const nameObj = reactive({ name: 'LeBrown', englishname: 'James' })
        const stop = watchEffect(()=>{
            console.log(nameObj.name);
            console.log(nameObj.englishname);
            setTimeout(() => {
                // 取消偵聽器
                stop()
            }, 3000);
        })
        const { name, englishname } = toRefs(nameObj)
        return { name, englishname }
    },
    template: `
        <div>
          <div>
            Name: <input v-model="name"/>
          </div>
          <div>
            Name is: {{name}}
          </div>
          <div>
            EnglishName: <input v-model="englishname"/>
          </div>
          <div>
            Name is: {{englishname}}
          </div>
        </div>
    `
})
const vm = app.mount('#root')

取消watch偵聽器也是一樣

讓watch變成非惰性

watch的第三個(gè)參數(shù)可以通過{immediate: true}對偵聽器進(jìn)行配置,這樣wath偵聽器就變成非惰性了

到此這篇關(guān)于Vue CompositionAPI中watch和watchEffect的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Vue watch watchEffect內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue終端報(bào)錯:不是內(nèi)部或外部命令

    解決vue終端報(bào)錯:不是內(nèi)部或外部命令

    最近學(xué)習(xí)一下前端框架Vue,整體上感覺還是比較有意思的,但是在安裝vue-cli腳手架的時(shí)候,出現(xiàn)了一些問題,解決問題也花費(fèi)了不少時(shí)間,下面這篇文章主要給大家介紹了關(guān)于解決vue終端報(bào)錯:不是內(nèi)部或外部命令的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • vue前端img訪問鑒權(quán)后端進(jìn)行攔截的代碼示例

    vue前端img訪問鑒權(quán)后端進(jìn)行攔截的代碼示例

    路由攔截是一種在用戶訪問特定頁面之前對其進(jìn)行攔截和處理的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于vue前端img訪問鑒權(quán)后端進(jìn)行攔截的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • vue router2.0二級路由的簡單使用

    vue router2.0二級路由的簡單使用

    這篇文章主要為大家詳細(xì)介紹了vue router2.0二級路由的簡單使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue?3跨組件傳參之非父子層級通信解決方案

    Vue?3跨組件傳參之非父子層級通信解決方案

    在Vue3組件開發(fā)中,組件之間的數(shù)據(jù)傳遞是一個(gè)非常重要的功能,這篇文章主要介紹了Vue?3跨組件傳參之非父子層級通信解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • Vue自定義Hook實(shí)現(xiàn)簡化本地存儲

    Vue自定義Hook實(shí)現(xiàn)簡化本地存儲

    這篇文章主要為大家詳細(xì)介紹了如何通過使用 Vue 3 的 Composition API 創(chuàng)建一個(gè)強(qiáng)大而靈活的自定義 Hook,簡化了在 localStorage 或 sessionStorage 中管理數(shù)據(jù)的流程,需要的可以參考下
    2023-12-12
  • 前端Vue如何獲取登錄的用戶名或用戶id代碼實(shí)例

    前端Vue如何獲取登錄的用戶名或用戶id代碼實(shí)例

    在前端開發(fā)中,獲取登錄用戶的用戶名是一項(xiàng)常見的需求,這篇文章主要給大家介紹了關(guān)于前端Vue如何獲取登錄的用戶名或用戶id的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Vuex持久化插件(vuex-persistedstate)解決刷新數(shù)據(jù)消失的問題

    Vuex持久化插件(vuex-persistedstate)解決刷新數(shù)據(jù)消失的問題

    這篇文章主要介紹了Vuex持久化插件(vuex-persistedstate)-解決刷新數(shù)據(jù)消失的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • 如何在Vue.js項(xiàng)目中使用Jest進(jìn)行單元測試

    如何在Vue.js項(xiàng)目中使用Jest進(jìn)行單元測試

    在眾多測試框架中,Jest?因其易用性、強(qiáng)大功能以及與?Vue.js?的良好兼容性,成為了許多開發(fā)者的首選,本文將詳細(xì)介紹如何在?Vue.js?項(xiàng)目中使用?Jest?進(jìn)行單元測試,需要的可以參考下
    2024-11-11
  • Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前想要訪問的頁面

    Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前想要訪問的頁面

    這篇文章主要介紹了Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前相要訪問的頁面,本文僅演示路由跳轉(zhuǎn)和導(dǎo)航守衛(wèi)相關(guān)代碼的實(shí)現(xiàn),不包含具體的權(quán)限驗(yàn)證和登錄請求,需要的朋友可以參考下
    2022-12-12
  • Vue3報(bào)錯‘defineProps‘?is?not?defined的解決方法

    Vue3報(bào)錯‘defineProps‘?is?not?defined的解決方法

    最近工作中遇到vue3中使用defineProps中報(bào)錯,飄紅,所以這篇文章主要給大家介紹了關(guān)于Vue3報(bào)錯‘defineProps‘?is?not?defined的解決方法,需要的朋友可以參考下
    2023-01-01

最新評論

浪卡子县| 维西| 华亭县| 涪陵区| 荔浦县| 喀喇沁旗| 巨鹿县| 崇阳县| 齐齐哈尔市| 万宁市| 红桥区| 德兴市| 会宁县| 沭阳县| 安岳县| 崇信县| 延长县| 通辽市| 宿州市| 长泰县| 增城市| 卢龙县| 临汾市| 北宁市| 怀远县| 如东县| 将乐县| 临安市| 延庆县| 两当县| 城固县| 博爱县| 玉山县| 黔东| 金昌市| 蕉岭县| 新郑市| 张家港市| 乌苏市| 红原县| 舟山市|