Vue 中 provide和inject的使用
前言
在Vue中我們可以很方便的通過父組件往子組件傳遞屬性,Props是我們將數據傳遞到子組件的主要方式之一。例如,下面的代碼,我們往子組件(PopularList )傳遞瞭屬性 name
,其值是Most Popular Posts
。在PopularList中我們可以通過name訪問數據。
<PopularList name="Most Popular Posts" />
但是有時子組件中可以包含子組件,如果我們想將數據從父組件傳遞到孫子組件,最簡單的方法就是使用provide/reject。這種方式的好處是:我們不需要將屬性先傳給子組件,再傳給孫子組件。就像Parent → Child → GrandChild。我們可以簡單地將它傳遞為Parent → Grandchild,
如下圖所示:
Vue中如何使用provide和inject
如果你使用的是composition API。可以直接使用provide 方法傳遞任何形式的數據。
<script setup> import { provide } from 'vue' provide('myKey', 'message'); </script>
provide函數接收兩個參數 – 值和鍵。上面的例子中,鍵是mykey,值是message。和props一樣,這個是可以是對象,數字或其他任何有效類型的數據。使用ref,我們還可以將這個屬性設置為響應式。
<script setup> import { provide, ref } from 'vue' const message = ref('message'); provide('myKey', message); </script>
如果使用的是Options API,則可以使用以下結構在組件中提供數據。
export default { provide: { myKey: 'message' } }
在 Vue 中使用註入訪問父數據
在上面的例子中,我們說明瞭如何在父組件中傳值。我們在孫子組件中,該如何獲取到這個值,我們可以使用inject來訪問屬性。
例如,假設我們有一個如下所示的 Vue 組件:
<script setup> import { ref, provide } from 'vue' import ChildElement from './Child.vue'; const message = ref('message'); provide('myKey', message); </script> <template> <p>Hello World!</p> <ChildElement /> </template>
然後是一個Child.vue看起來像這樣的子組件:
<script setup> import GrandChildElement from './GrandChildElement.vue'; </script> <template> <GrandChildElement /> </template>
在GrandChildElement中,我們可以訪問myKey,因為我們在父級中provide瞭它。我們可以在 Child.vue中這樣做,但我們也可以隻使用inject。provide使我們能夠從多個級別獲取數據。要訪問這些數據GrandChildElement,我們使用inject.
我們的GrandChildElement.vue文件可能看起來像這樣:
<script setup> import { inject } from 'vue' const message = inject('myKey') </script>
const message這裡將返回文本message,因為這是我們設置myKey的provide。如果使用的是 Options API,則可以改為
export default { inject: [ 'myKey' ], created() { // Can access this.myKey here } }
到此這篇關於Vue 中 provide和inject的使用的文章就介紹到這瞭,更多相關Vue provide和inject 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Vue3常用的通訊方式總結與實例代碼
- vue3中 provide 和 inject 用法及原理
- vue中的inject用法及說明
- Vue3的7種種組件通信詳情
- Vue3學習筆記之依賴註入Provide/Inject