一、Vue3 Inject的概念
1、Vue3 Inject是一種提供了父組件向子組件傳輸數據的方式,可以向下傳遞數據而不需要手動逐層傳遞。
2、Vue3 Inject是Vue3.0中的一項新功能,代替了Vue2.x的provide/inject API。
3、Vue3 Inject利用了組件實例的屬性,可以在子組件中使用inject接收父組件中provide提供的數據。
二、Vue3 Inject的用法
1、定義provide
const App = {
provide: {
theme: 'dark'
},
//...
}
2、接收inject
const Child = {
inject: ['theme'],
//...
}
3、使用provide/inject傳遞對象
const App = {
provide() {
return {
user: {
name: 'Tom',
age: 18
}
}
}
//...
}
const Child = {
inject: ['user'],
created() {
console.log(this.user.name) //Tom
console.log(this.user.age) //18
}
//...
}
三、Vue3 Inject的局限性和注意事項
1、provide屬性只能在組件的選項對象中使用,而不能在單個函數內部使用。
2、如果一個inject的key被設置為了數組,則數組的最後一個元素會被覆蓋。
3、如果一個組件在自己的provide中調用非同步的操作,那麼在子組件中可能會觀察不到結果。
4、當多個provide/inject的組件存在嵌套時,inject只會獲取其最近的父級 provide 中提供的數據。
5、當使用Vue.extend擴展組件時不能提供inject。
四、Vue3 Inject和Provide的區別
1、Provide可以傳遞一個簡單的值或者一個對象,而Inject只能接收值或數組中的最後一個對象作為默認值。
2、Provide是通過上下文,向下傳遞內容,而Inject則是通過接收上下文傳遞的內容。
3、Inject依賴於Provide,如果提供的Provide中沒有相應的數據,Inject提供的默認值也不會發揮作用。
五、Vue3 Inject的應用場景
1、需要同時使用多個組件中的數據。
2、需要在複雜組件中,但是不希望手動傳遞數據。
3、需要在Vue.js框架中使用動態的內容。
4、需要在應用中顯示數據,但是數據的來源並不一定是組件。
六、Vue3 Inject的完整示例
<template>
<div>
<child-1></child-1>
<child-2></child-2>
</div>
</template>
<script>
const Parent = {
provide() {
return {
fontColor: 'red'
}
}
}
const Child1 = {
inject: ['fontColor'],
template: '<div :style="{ color: fontColor }">child-1</div>'
}
const Child2 = {
inject: ['fontColor'],
template: '<div :style="{ color: fontColor }">child-2</div>'
}
export default {
components: {
Child1,
Child2
},
mixins: [Parent]
}
</script>
七、總結
Vue3 Inject是Vue3.0中提供的一種新的組件通信方式,可以優雅的傳遞組件數據,使得組件之間的通信更加方便快捷。Vue3 Inject在開發中有很廣泛的應用,能極大地提高代碼的可讀性和可維護性。但是在使用過程中,也需注意其局限性和注意事項,使得應用更加穩定和安全。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/220020.html
微信掃一掃
支付寶掃一掃