Day_21 : 让 Vite 来开启你的Vue 之 跨元件资料传递 Provide & Inject

Hi Dai Gei Ho~ 我是 Winnie ~

在今天文章中,我们要来说说 Vue3 Composition API中 的 provide & inject。

什麽是 provide & inject?

provide/inject 是 Vue 在 2.2.0 版本新增的 API,主要的功用就是让跨组件的资料传递更为方便。

什麽意思?让我们用较生活化的例子来比喻:

这是一个无聊的日常小故事:

从前从前..有一位 曾祖父 想要传话给 小明,却因为没有手机可以使用,只好将话传给 自己的儿子(小明爷爷),小明的爷爷 再透过自己儿子(小明爸爸)来传话 给小明 ,结果 传着传着 曾祖父 就老了 ..

假如 今天曾祖父 与 爷爷 都有一部手机 是不是就可以很方便的传话给小明了.. 也就不会老了

所以在回到正题之中,从以上祖孙失联中的传话方式 就好比 我们在Vue之中使用传统props来做跨阶层元件之间的状态沟通,透过一层一层元件来传递资料,而这样不仅会很麻烦,同时也会增加元件之间的耦合度

所以此时 provide & inject 就是 那部手机,让我们可以方便达到跨阶层元件之间的状态沟通。

那要如何使用呢? 嗯 其实用法很简单,让我们先来看看官方的概念图:

从上图我们可以看到,我们需在提供资料状态的上层元件 加上 provide,再透过 Inject 的 让底层元件来取用。

范例如下:

// grandpa.vue
<script>
import { ref, provide } from 'vue';

export default ({
  setup() {
  
    //传递资料也可以是任何形式,如ref物件 、字串等
    provide('figure', "爷爷"); 
    provide('message', "小明 你吃饱了吗"); 
    
  }
});
</script>

在提供状态的 上层元件中,我们可以透过provide()函式来传递,而其主要接受两个参数,来定义要传递的资料名称 与值。

// grandson.vue
<script>
import { inject } from 'vue';

export default ({
  setup() {
  
  //透过 定义的名称名称来取值
   const messenger= inject('figure') 
   const content = inject('message') 
   
   return {
       messenger,
   }   content 
  }
});
</script>

接着,在需要取值的子元件中,我们可以使用刚才所定义的名称 ,透过inject()来取值。

注意:如果 元件被销毁时,provide与inject 得连结就会失效,因为两者都只能在现存元件中使用。

以上就是关於 Provide & Inject基础用法的讲解,如有问题欢迎大家多多指教,谢谢。


<<:  day18: pure function

>>:  【PHP Telegram Bot】Day24 - InlineKeyboardMarkup、Deep Link:来玩玩讯息下方的按钮吧

铁人赛 Day12-- PHP SQL基本语法(七) -- UPDATE & DELETE

前言 昨天有谈到了新增,那今天就来谈谈 更新UPDATE 和 删除DELETE 吧 UPDATE 资...

JS 23 - 非同步执行,也是要依序排队!

大家好! 今天我们要实作的静态函式有点像 Promise 的感觉。 我们进入今天的主题吧! 程序码 ...

Day 29 -『破釜沉舟的转职路 - 去年说要成为软件工程师的我,今年 38 岁了,我成为工程师了吗?』-- 上班将近二个月了,我都在干嘛呢?

今天是我到职的 2 个月又 3 天,我就先说说我这两个月都在做些什麽事情吧。 终於上周我被交付了一...

Day30-结赛感言之 This is not the end

就是今天!!想不到写着写着三十天就这样过去了~回顾这三十天的旅成还是觉得有点不可思议,真的只能用我同...

为何会有分散式架构的出现?

影片连结:https://bit.ly/3B3r9bu 内容摘要: 大家常常听到分散式架构,但到底...