溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vue高級組件之provide與inject怎么使用

發(fā)布時間:2023-04-27 11:04:07 來源:億速云 閱讀:112 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“vue高級組件之provide與inject怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“vue高級組件之provide與inject怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

    vue provide與inject使用及說明

    vue中不同組件通信方式如下

    • 1.父子組件,通過prop

    • 2.非父子組件,通過vuex或根vue轉(zhuǎn)載器

     通常是以上兩種情況,然而還有一種比較特殊的情況,即孫子組件或更深層次的組件通信

    1.下面是a.vue

    <template>
        <div class="test">
            <son prop="data"></son>
        </div>
    </template>

    2.下面是son.vue

    <template>
        <div>
            <grandson prop="data"></grandson>
        </div>
    </template>
     
    <script>
    export default {
        name: 'Son',
        props: ['data'],
    }
    </script>

    很容易看出,如果父組件需要與grandson通信,除了vuex,必須先與son組件通信,再由son與grandson通信,在層級比較少的情況下也無可厚非,但是層級一旦多起來是很可怕的

    有人會問為什么不用vuex,簡單省事,有很多為了這個引入vuex會導(dǎo)致代碼性價(jià)比比較低,項(xiàng)目本身沒有使用vuex的必要

    那么這種情況下provide / inject就登場了

    • 1.provide就相當(dāng)于加強(qiáng)版父組件prop

    • 2.inject就相當(dāng)于加強(qiáng)版子組件的props 

    因?yàn)橐陨蟽烧呖梢栽诟附M件與子組件、孫子組件、曾孫子...組件數(shù)據(jù)交互,也就是說不僅限于prop的父子組件數(shù)據(jù)交互,只要在上一層級的聲明的provide,那么下一層級無論多深都能夠通過inject來訪問到provide的數(shù)據(jù)

    1.父級組件如下

    <template>
        <div class="test">
            <son prop="data"></son>
        </div>
    </template>
     
    <script>
    export default {
        name: 'Test',
        provide: {
            name: 'Garrett'
        }
    }

    2.孫子組件,注意這里是孫子組件,父級 -> 子組件 -> 孫子組件三個層級關(guān)系

    <template>
        <div>
            {{name}}
        </div>
    </template>
     
    <script>
    export default {
        name: 'Grandson',
        inject: [name]
    }
    </script>

    這里可以通過inject直接訪問其兩個層級上的數(shù)據(jù),其用法與props完全相同,同樣可以參數(shù)校驗(yàn)等

    缺點(diǎn)

    這么做也是有明顯的缺點(diǎn)的,在任意層級都能訪問導(dǎo)致數(shù)據(jù)追蹤比較困難,不知道是哪一個層級聲明了這個或者不知道哪一層級或若干個層級使用了,因此這個屬性通常并不建議使用能用vuex的使用vuex,不能用的多傳參幾層,但是在做組件庫開發(fā)時,不對vuex進(jìn)行依賴,且不知道用戶使用環(huán)境的情況下可以很好的使用

    vue3中父子組件傳值(provide/inject)

    在vue3中的父子組件一般都用provide 和 inject 傳值

    父組件中引入和注冊了子組件之后

    在script標(biāo)簽下引入provide就可以將父組件中的變量或方法傳遞出去

    在子組件中就可以用inject來接收一下 不管子組件的層級有多深都可以接收到

    具體操作

    • provide('變量名','變量')

    • inject('變量名')

    • provide('事件名','事件')

    • inject('事件名','事件')

    讀到這里,這篇“vue高級組件之provide與inject怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI