使用provide/inject在vue3+tsx语法中提示provide() can only be used inside setup().
时间: 2024-03-07 13:47:34 浏览: 246
Vue 2.0 中依赖注入 provide/inject组合实战
5星 · 资源好评率100%
在Vue 3的Composition API中,可以使用`provide`和`inject`函数,来实现跨层级组件之间的数据传递。在使用`provide`和`inject`时,需要注意以下几点:
1. `provide`和`inject`只能在设置组件选项的地方使用,也就是在`setup()`函数中使用。
2. `provide`和`inject`是基于`Symbol`实现的,所以在使用时需要定义一个唯一的`Symbol`作为标识符。
下面是一个使用`provide`和`inject`实现跨层级组件通信的例子:
```tsx
import { defineComponent, provide, inject } from 'vue';
const symbol = Symbol();
const Parent = defineComponent({
setup() {
const data = 'parent data';
provide(symbol, data);
return {
data,
};
},
template: `
<div>
<h1>Parent Component</h1>
<p>Data: {{ data }}</p>
<Child />
</div>
`,
});
const Child = defineComponent({
setup() {
const data = inject(symbol);
return {
data,
};
},
template: `
<div>
<h2>Child Component</h2>
<p>Data from Parent: {{ data }}</p>
</div>
`,
});
```
在上面的例子中,`Parent`组件通过`provide`函数提供了一个数据,`Child`组件通过`inject`函数获取了这个数据。由于`provide`和`inject`只能在`setup()`函数中使用,所以需要在`setup()`中调用这两个函数来实现跨层级组件通信。
阅读全文