有关reject和provide

在 Vue 2 中,injectprovide 是一对选项,用于在祖先组件和后代组件之间建立依赖关系,而不必显式地通过 props 逐层传递。这在你需要跨越多层组件传递数据时非常有用。

provideinject 主要在开发高阶插件/组件库时使用。在大多数应用中,应优先使用 propsevents 进行父子组件间的通信。

provide

provide 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的属性。这些属性在后代组件中可以通过 inject 来接收。

inject

inject 选项应该是:

  • 一个字符串数组,或
  • 一个对象,对象的 key 是本地的绑定名,value 是:
    • 在可用的注入内容中的 key (字符串或 Symbol),或
    • 一个对象,该对象的:
      • from 属性是在可用的注入内容中的 key (字符串或 Symbol)
      • default 属性是如果不存在注入内容时应使用的默认值

使用示例

在祖先组件中:

<template>  
  <div>  
    <ChildComponent />  
  </div>  
</template>  
  
<script>  
import ChildComponent from './ChildComponent.vue';  
  
export default {  
  name: 'AncestorComponent',  
  components: {  
    ChildComponent  
  },  
  provide() {  
    return {  
      foo: 'foo',  
      bar: 'bar'  
    };  
  }  
}  
</script>

 在后代组件中:

<template>  
  <div>  
    {{ foo }} {{ bar }}  
  </div>  
</template>  
  
<script>  
export default {  
  name: 'ChildComponent',  
  inject: ['foo', 'bar']  
}  
</script>

 

在这个例子中,AncestorComponent 提供了 foobar 这两个属性,然后 ChildComponent 通过 inject 选项接收了这两个属性。

注意事项

  • provideinject 主要在开发高阶插件/组件库时使用。在大多数应用中,应优先使用 propsevents 进行父子组件间的通信。
  • 除非 provideinject 是在开发可复用的插件/组件库,否则不推荐使用,因为它会使代码难以理解和测试。
  • provideinject 并不是响应式的。这是说,如果祖先组件的提供值发生变化,后代组件不会收到更新。如果你需要响应式的数据传递,应使用 propsevents

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值