provide/inject

本文介绍了在Vue.js中如何通过`provide`在父组件提供数据,以及在子组件中使用`inject`进行数据注入,展示了组件间通信的关键概念和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//在父组件中,使用provide提供数据:
//name:定义提供 property的 name。
//value :property的值。
 setup(){
    provide('info',"值")
  }
​
//在子组件中,使用inject注入数据
//name:接收 provide提供的属性名。
//default:设置默认值,可以不写,是可选参数。
setup(){
    const info = inject("info")
    inject('info',"设置默认值")
    return {
        info
    }
  }

### ProvideInject 的概念 ProvideInjectVue 3 实现依赖注入的关键机制。父组件能够通过 `provide` 提供数据,而任何后代组件则可以通过 `inject` 获取这些数据[^1]。 ### Provide 方法详解 `provide` 主要用于父级组件向其所有子孙组件提供共享的数据或功能。这使得在整个子树内传播信息变得更加容易,尤其是在处理全局配置项或是需要广泛访问的状态时非常有用。为了使提供的属性具有响应性,应当利用 `ref()` 或者 `reactive()` 来创建响应式对象[^3]。 ```javascript // 父组件 ParentComponent.vue 使用 setup() 函数的方式 import { provide, ref } from 'vue'; export default { name: "ParentComponent", setup() { const title = ref("默认标题"); // 将响应式变量作为可注入的内容暴露出去 provide('title', title); return {}; } } ``` ### Inject 方法详解 相对地,`inject` 则是在那些希望接收到由祖先节点所提供的资源的地方调用的方法。它可以是一个字符串名称列表或者是带有选项的对象形式指定所需注入的键名及其对应的解析逻辑。对于非响应性的简单值来说,一旦被消费端捕获之后就不会再随源变化而同步更新;而对于基于 `ref`/`reactive` 构建起来的服务实例,则可以在整个生命周期里保持最新状态并触发视图重绘[^4]。 ```javascript // 子组件 ChildComponent.vue 接收来自上级提供的数据 import { inject } from 'vue'; export default { name: "ChildComponent", setup() { // 注入名为'title'的响应式引用 const title = inject('title'); return { title }; }, template: `<div>{{ title }}</div>` }; ``` ### Provide vs Inject 的主要差异 | 特征 | Provide | Inject | |--| | **角色定位** | 负责向外发布可供下游使用的公共资产 | 用来声明当前上下文中期望获得哪些外部供给 | | **作用范围** | 可影响到所有的直系及间接下层组件 | 仅限于自身以及更深层嵌套的后代 | | **传递内容** | 支持任意 JavaScript 值 | 同样支持各种 JS 类型 | | **响应特性** | 需显式转换为 Ref/reactive 才能维持动态效果 | 自动继承自上游提供的响应行为 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值