Vue3 跨层级组件通信:Provide 与 Inject 机制详解
在 Vue 3 开发中,当组件层级较深时,层层传递 props 不仅繁琐还容易出错。这时,provide 和 inject 就成了跨层级通信的神器。它们允许祖先组件直接向任意后代组件传递数据,无需中间层透传。
核心概念
provide 是祖先组件用来'抛出'数据的 API,而 inject 则是后代组件用来'接收'数据的 API。两者配合使用,通常都在 setup 函数中调用。
基础用法
1. 祖先组件提供数据
在父级组件中,我们引入 provide 并定义一个标识符(key)和对应的值。
// Parent.vue
<template>
<Child />
</template>
<script>
import { provide } from 'vue';
import Child from './Child.vue';
export default {
components: { Child },
setup() {
const message = "Hello from Parent!";
// 第一个参数是 key,第二个是提供的值
provide('message', message);
}
};
</script>
这里我们提供了一个字符串 message。任何子孙组件都可以通过相同的 key 获取它。
2. 后代组件注入数据
子组件通过 inject 获取数据,注意 key 必须与祖先组件一致。
// Child.vue
<template>
<div>{{ message }}</div>
</template>
<script>
{ inject } ;
{
() {
message = ();
{ message };
}
};

