一、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/n/220020.html
微信扫一扫
支付宝扫一扫