vue3中provide与inject的区别
时间: 2024-05-09 22:15:03 浏览: 138
在Vue 3中,`provide`和`inject`是一对新的API,用于在父子组件之间进行数据传递。它们与Vue 2中的`props`和`$emit`有些相似,但又有所不同。
`provide`用于在父组件中提供数据,而`inject`用于在子组件中注入这些数据。它们的主要区别在于:
1. `provide`可以提供任何数据类型,包括函数、对象、数组等,而`props`只能提供单向数据流的属性。
2. `provide`提供的数据可以在整个父组件的子组件树中使用,而不仅仅是直接子组件。而`props`只能在直接子组件中使用。
3. `inject`可以在子组件中访问父组件提供的数据,而不需要通过props层层传递数据。
下面是一个简单的例子:
```javascript
// parent component
import { provide } from 'vue'
export default {
setup() {
const message = 'Hello from parent!'
provide('message', message)
// 或者 provide({ message })
}
}
// child component
import { inject } from 'vue'
export default {
setup() {
const message = inject('message')
// 或者 const { message } = inject()
console.log(message) // 输出:'Hello from parent!'
}
}
```
在上面的例子中,`provide`提供了一个名为`message`的字符串,它可以在整个父组件的子组件树中使用。`inject`用于在子组件中注入这个数据,并将其赋值给一个本地变量`message`。最终,在子组件中打印`message`的值,它将输出:'Hello from parent!'。
阅读全文