为什么要用Provide跟Inject
在实际开发中,我们从父组件向子组件传递数据时,经常通过props进行传递;但是在一个深层级的子组件需要一个祖先组件的数据时,我们就必须通过 props沿着组件链逐层传递,但是,沿途的子组件并不需要这些数据,但仍需通过props去接收:
而 provide和inject就可以帮助我们解决这个问题。 父组件通过 provide提供后代组件需要的数据,而子组件通过 inject去注入父组件的数据到自己组件上。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。
使用
Provide(提供)
provide函数接收两个参数:
- 第一个参数: 注入名。可以是一个字符串或者一个symbol
- 第二个参数: 提供的值。可以是任意类型,包括响应式状态(可以直接响应)
// 父级组件
import { provide } from 'vue'
provide('message', 'hello')
Inject(提供)
// 子组件
import { inject } from 'vue'
const message = inject('message')
console.log(message) // hello