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

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

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

watch

偵聽一個數(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ù)的第一個參數(shù))和當前值(回調(diào)函數(shù)的第二個參數(shù))
  • watch可以偵聽ref基礎(chǔ)類型的數(shù)據(jù),也可以對reactive類型的數(shù)據(jù)進行監(jiān)聽(watch的第一個參數(shù)要寫成函數(shù)的形式,函數(shù)里面寫要監(jiān)聽值或?qū)ο蟮膶傩?

偵聽多個數(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可以偵聽多個數(shù)據(jù)的變化(watch的第一個參數(shù)是一個數(shù)組,第二個參數(shù)是一個函數(shù),函數(shù)的參數(shù)是數(shù)組),用一個偵聽器承載

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')

運行結(jié)果

備注

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

總結(jié)

  • watchwatchEffect 都是具備偵聽能力的語法,但是在使用時還是有區(qū)別的。比如:在代碼中要寫ajax請求的時候,一般不會用到之前的數(shù)據(jù),只會用到當前的數(shù)據(jù),結(jié)合當前的數(shù)據(jù)發(fā)送請求,這種情況下使用watchEffect來發(fā)送ajax就比較合適
  • setup是純函數(shù),給固定的輸入就會有固定的輸出,但是涉及到異步請求或者定時器,輸出和輸入就不是純函數(shù),導(dǎo)致它不是純函數(shù)的異步請求叫Effect(副作用),因此從名字上看在處理異步的操作的時候,最好使用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的第三個參數(shù)可以通過{immediate: true}對偵聽器進行配置,這樣wath偵聽器就變成非惰性了

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    如何在Vue.js項目中使用Jest進行單元測試

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

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

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

    Vue3報錯‘defineProps‘?is?not?defined的解決方法

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

最新評論

济宁市| 醴陵市| 平乡县| 荃湾区| 博客| 和顺县| 苏尼特左旗| 错那县| 南郑县| 日喀则市| 西畴县| 崇信县| 原阳县| 塔城市| 余江县| 县级市| 梨树县| 凤凰县| 富平县| 高安市| 九台市| 公主岭市| 新兴县| 柳州市| 海口市| 甘孜县| 余江县| 遂平县| 新乡县| 溧阳市| 禄丰县| 杭锦后旗| 浦江县| 天全县| 济源市| 遂平县| 洱源县| 日喀则市| 庄浪县| 瑞安市| 龙海市|