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

vue3中?provide?和?inject?用法小結(jié)

 更新時(shí)間:2023年11月24日 11:39:32   作者:李剛大人  
父子組件傳遞數(shù)據(jù)時(shí),使用的是props和emit,父傳子時(shí),使用的是?props,如果是父組件傳孫組件時(shí),就需要先傳給子組件,子組件再傳給孫組件,如果多個(gè)子組件或多個(gè)孫組件使用時(shí),就需要傳很多次,會(huì)很麻煩,這篇文章主要介紹了vue3中?provide?和?inject?用法,需要的朋友可以參考下

前言:

在父子組件傳遞數(shù)據(jù)時(shí),通常使用的是 props 和 emit,父傳子時(shí),使用的是 props,如果是父組件傳孫組件時(shí),就需要先傳給子組件,子組件再傳給孫組件,如果多個(gè)子組件或多個(gè)孫組件使用時(shí),就需要傳很多次,會(huì)很麻煩。

像這種情況,可以使用 provide 和 inject 解決這種問題,不論組件嵌套多深,父組件都可以為所有子組件或?qū)O組件提供數(shù)據(jù),父組件使用 provide 提供數(shù)據(jù),子組件或?qū)O組件 inject 注入數(shù)據(jù)。同時(shí)兄弟組件之間傳值更方便。

一、Vue2 的 provide / inject 使

用provide :是一個(gè)對象,里面是屬性和值。如:

provide:{
 info:"值"
}

如果 provide 需要使用 data 內(nèi)的數(shù)據(jù)時(shí),這樣寫就會(huì)報(bào)錯(cuò)。訪問組件實(shí)例 property 時(shí),需要將 provide 轉(zhuǎn)換為返回對象的函數(shù)。

provide(){
 return{
  info: this.msg
 }
}

inject :是一個(gè)字符串?dāng)?shù)組。如:

inject: [ 'info' ]

接收上邊 provide 提供的 info 數(shù)據(jù),也可以是一個(gè)對象,該對象包含 from 和 default 屬性,from 是可用做的注入內(nèi)容中搜索用的 key,default 屬性是指定默認(rèn)值。

在 vue2 中 project / inject 應(yīng)用:

//父組件

export default{
 provide:{
  info:"提供數(shù)據(jù)"
 }
}

//子組件

export default{
 inject:['info'],
 mounted(){
     console.log("接收數(shù)據(jù):", this.info) // 接收數(shù)據(jù):提供數(shù)據(jù)
 }
}

provide / inject 類似于消息的訂閱和發(fā)布。provide 提供或發(fā)送數(shù)據(jù), inject 接收數(shù)據(jù)。

二、Vue3 的 provide / inject 使用

在組合式 API 中使用 provide/inject,兩個(gè)只能在 setup 期間調(diào)用,使用之前,必須從 vue 顯示導(dǎo)入 provide/inject 方法。

provide 函數(shù)接收兩個(gè)參數(shù):

provide( name,value )

name:定義提供 property 的 name 。
value :property 的值。
使用時(shí):

import { provide } from "vue"
export default {
  setup(){
    provide('info',"值")
  }
}

inject 函數(shù)有兩個(gè)參數(shù):

inject(name,default)

name:接收 provide 提供的屬性名。
default:設(shè)置默認(rèn)值,可以不寫,是可選參數(shù)。
使用時(shí):

import { inject } from "vue"
export default {
  setup(){
    inject('info',"設(shè)置默認(rèn)值")
  }
}

完整實(shí)例1:provide/inject實(shí)例
//父組件代碼

<script>
import { provide } from "vue"
export default {
  setup(){
    provide('info',"值")
  }
}
</script>

//子組件 代碼

<template>
 {{info}}
</template>
<script>
import { inject } from "vue"
export default {
  setup(){
    const info = inject('info')
    return{
      info
    }
  }
}
</script>

三、添加響應(yīng)性

為了給 provide/inject 添加響應(yīng)性,使用 ref 或 reactive 。

完整實(shí)例2:provide/inject 響應(yīng)式

//父組件代碼
<template>
  <div>
    info:{{info}}
    <InjectCom ></InjectCom>
  </div>
</template>
<script>
import InjectCom from "./InjectCom"
import { provide,readonly,ref } from "vue"
export default {
  setup(){
    let info = ref("今天你學(xué)習(xí)了嗎?")
    setTimeout(()=>{
      info.value = "不找借口,立馬學(xué)習(xí)"
    },2000)
    provide('info',info)
    return{
      info
    }
  },
  components:{
    InjectCom
  }
}
</script>
// InjectCom 子組件代碼
<template>
 {{info}}
</template>
<script>
import { inject } from "vue"
export default {
  setup(){
    const info = inject('info')
    setTimeout(()=>{
      info.value = "更新"
    },2000)
    return{
      info
    }
  }
}
</script>

上述示例,在父組件或子組件都會(huì)修改 info 的值。

provide / inject 類似于消息的訂閱和發(fā)布,遵循 vue 當(dāng)中的單項(xiàng)數(shù)據(jù)流,什么意思呢?就是數(shù)據(jù)在哪,修改只能在哪,不能在數(shù)據(jù)傳遞處修改數(shù)據(jù),容易造成狀態(tài)不可預(yù)測。

在訂閱組件內(nèi)修改值的時(shí)候,可以被正常修改,如果其他組件也使用該值的時(shí)候,狀態(tài)容易造成混亂,所以需要在源頭上規(guī)避問題。

到此這篇關(guān)于vue3中 provide 和 inject 用法的文章就介紹到這了,更多相關(guān)vue3 provide 和 inject 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js中輕松解決v-for執(zhí)行出錯(cuò)的三個(gè)方案

    Vue.js中輕松解決v-for執(zhí)行出錯(cuò)的三個(gè)方案

    v-for標(biāo)簽可以用來遍歷數(shù)組,將數(shù)組的每一個(gè)值綁定到相應(yīng)的視圖元素中去,下面這篇文章主要給大家介紹了關(guān)于在Vue.js中輕松解決v-for執(zhí)行出錯(cuò)的三個(gè)方案,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Vue如何指定不編譯的文件夾和favicon.ico

    Vue如何指定不編譯的文件夾和favicon.ico

    這篇文章主要介紹了Vue如何指定不編譯的文件夾和favicon.ico,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue toRef toRefs toRaw函數(shù)使用示例

    Vue toRef toRefs toRaw函數(shù)使用示例

    這篇文章主要介紹了Vue toRef toRefs toRaw函數(shù)使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • vue中使用scrollTo沒有效果的完美解決方法

    vue中使用scrollTo沒有效果的完美解決方法

    這篇文章主要介紹了在vue中使用scrollTo沒有效果的解決方法,本文給大家分享具體操作步驟,在這里需要注意scrollTo要作用在可滾動(dòng)的元素上,不然不生效,scrollTop就會(huì)一直為0,需要的朋友可以參考下
    2023-10-10
  • vue 項(xiàng)目地址去掉 #的方法

    vue 項(xiàng)目地址去掉 #的方法

    vue 項(xiàng)目往往會(huì)搭配 vue-router 官方路由管理器,它和 vue.js 的核心深度集成,讓構(gòu)建單頁面應(yīng)用變得易如反掌。這篇文章主要介紹了vue 項(xiàng)目地址去掉 #的方法,需要的朋友可以參考下
    2018-10-10
  • vue路由跳轉(zhuǎn)后刷新指定頁面的方法

    vue路由跳轉(zhuǎn)后刷新指定頁面的方法

    這篇文章主要介紹了vue路由跳轉(zhuǎn)后刷新指定頁面的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Vue3中的shallowRef?和shallowReactive對比分析

    Vue3中的shallowRef?和shallowReactive對比分析

    這篇文章主要介紹了Vue3中的shallowRef?和shallowReactive,通過示例代碼逐一對他們的使用做的詳細(xì)介紹,文末補(bǔ)充介紹了vue3的shallowRef()、shallowReactive()和shallowReadonly()的使用,需要的朋友可以參考下
    2023-01-01
  • element?ui富文本編輯器的使用效果與步驟(quill-editor)

    element?ui富文本編輯器的使用效果與步驟(quill-editor)

    富文本編輯器在任何項(xiàng)目中都會(huì)用到,在Element中我們推薦vue-quill-editor組件,下面這篇文章主要給大家介紹了關(guān)于element?ui富文本編輯器的使用效果與步驟(quill-editor)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • vue.js 解決v-model讓select默認(rèn)選中不生效的問題

    vue.js 解決v-model讓select默認(rèn)選中不生效的問題

    這篇文章主要介紹了vue.js 解決v-model讓select默認(rèn)選中不生效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue結(jié)合原生js實(shí)現(xiàn)自定義組件自動(dòng)生成示例

    Vue結(jié)合原生js實(shí)現(xiàn)自定義組件自動(dòng)生成示例

    這篇文章主要介紹了Vue結(jié)合原生js實(shí)現(xiàn)自定義組件自動(dòng)生成示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

区。| 长沙县| 杭锦旗| 泰兴市| 通化县| 修文县| 隆尧县| 房产| 富阳市| 平和县| 桂东县| 三原县| 道真| 灵石县| 兴和县| 长治县| 黔东| 定日县| 米脂县| 山阳县| 柞水县| 张家界市| 霍城县| 北京市| 云林县| 达日县| 黑河市| 策勒县| 原阳县| 澜沧| 仁怀市| 盐城市| 保德县| 冕宁县| 衡阳市| 海盐县| 镇宁| 瑞金市| 子洲县| 哈尔滨市| 渭源县|