Vue-依賴注入 provide & inject

閱讀時間約 2 分鐘

一般而言,組件之間的資料傳遞,可以使用 props 來達成,不過一旦層級過多的時候,props 就要逐層向下傳遞,會越來越麻煩且複雜。

而 provideinject 可以解決這個問題,它可以提供一個「源頭」,子組件們可以藉由同一個源頭取得對應的資料,且沒有層級分別,都可以取得,就不用逐層傳遞資料了。允許你在父組件中提供一些值,然後在它的子孫組件中使用 inject 來訪問這些值。下面是一個 provide & inject 的範例:


<!-- ParentComponent.vue (父組件) -->
<template>
<div>
<ChildComponent />
</div>
</template>

<script setup>
import { provide } from 'vue';
import ChildComponent from './ChildComponent.vue';

const sharedValue = 'Hello from parent';

provide('sharedValue', sharedValue);
</script>


父組件 ParentComponent.vue 使用 provide 來提供一個值 'Hello from parent'。這個值被命名為 sharedValue,並作為 provide 的第一個參數傳遞。


<!-- ChildComponent.vue (子組件) -->
<template>
<div>
<p>{{ sharedValue }}</p>
</div>
</template>

<script setup>
import { inject } from 'vue';

const sharedValue = inject('sharedValue');
</script>


在子組件 ChildComponent.vue 中,我們使用 inject 來訪問父組件提供的值。我們在 inject 中傳遞的參數是父組件提供的值的名稱,這裡是 'sharedValue'。然後,我們將返回的值賦值給 sharedValue 變量。

這樣的話,子組件就可以訪問到父組件提供的值了。這在需要在多個組件之間共享狀態或者方法時非常有用。提供的值可以是任何類型,包括數據、函數或對象。


    2會員
    14內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    郭欣玫的沙龍 的其他內容
    CSS-position
    閱讀時間約 3 分鐘
    CSS - margin、padding
    閱讀時間約 1 分鐘
    父子組件資料傳遞 props、emit
    閱讀時間約 5 分鐘
    你可能也想看
    創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
    Thumbnail
    avatar
    黑貓老師
    2024-06-29
    Vue 泛型元件,讓 TypeScript 更精確大家好,我是鱈魚。(^∀^●)ノシ Vue 3.3 終於新增了泛型元件(Generic Component),這讓我們可以在 TypeScript 環境中得到更準確的型別提示。( •̀ ω •́ )✧ 讓我們一起來看看吧!
    Thumbnail
    avatar
    鱈魚
    2024-04-17
    Vue 程式札記 : emit 事件發射組件之間的通信是 Vue 應用開發中的一個重要方面。Vue 提供了一種名為事件發射(emit)的機制,讓子組件能夠向父組件發送消息。本文將介紹 Vue 中的事件發射(emit)機制,並通過實際範例演示其用法。
    Thumbnail
    avatar
    梧笙
    2024-03-27
    Vue 程式札記 : Props 組件傳遞資料在 Vue 中,組件是構建應用程式的基本單位,而 props 是組件間傳遞資料的主要方式之一,本文將介紹 Vue 中的 props,並通過實際範例展示如何使用 props 實現組件間的資料傳遞。
    Thumbnail
    avatar
    梧笙
    2024-03-21
    Vue 程式札記 : 指令 v-bindv-bind 指令是最常用的指令之一,它用於將資料綁定到 HTML 屬性。本文將介v-bindnd指令的使用方法,並透過實際範例幫助你理解v-bindbind 指令。
    Thumbnail
    avatar
    梧笙
    2024-03-15
    Vue 程式札記 : 指令 v-modelv-model 指令是 Vue 中一個非常重要的功能,它實現了表單輸入和應用狀態之間的雙向綁定。本文將介紹如何使用 v-model 指令。
    Thumbnail
    avatar
    梧笙
    2024-03-11
    Vue 程式札記 : 指令 v-for在Vue中,v-for指令是用於渲染列表數據。本文將介紹v-for指令的用法,並提供簡單的範例來幫助你理解如何在你的 Vue 應用中有效地使用v-for指令。
    Thumbnail
    avatar
    梧笙
    2024-03-08
    Vue 程式札記 : 指令 v-if、v-show指令(Directives)是 Vue 中一個重要的概念,它們提供了一種簡單的方式來操作 DOM 元素。本文將介紹 Vue 的兩個常用指令:v-if 和 v-show,並通過實際範例來解釋它們的不同之處和使用場景。
    Thumbnail
    avatar
    梧笙
    2024-03-06
    Vue 程式札記 : Ref 與 Reactive在 Vue 3 的 Composition API 中,引入了兩個重要的響應式數據處理工具:ref 和 reactive,本文將介紹ref 和 reactive,並透過實際範例來解釋它們的用法和差異。
    Thumbnail
    avatar
    梧笙
    2024-03-04
    [5] 寫一個 Vue 頁面定義路由 首先先來定義路由,先把上一篇寫的 home.vue 定義在根路由。 打開 src/router/index.ts,在 routes 內定義 path 定義 url,component 定義要指向哪個 vue 頁面,component:()=>import('@/components/hom
    Thumbnail
    avatar
    張哲嘉
    2022-10-06