组合式函数不能直接调用 inject,必须由组件在 setup 中执行 inject 后将响应式数据传入;推荐显式传参,避免使用 getcurrentinstance 等私有 api。

在 Vue 3 组合式函数(Composable)中,若需访问祖先组件通过 provide 注入的状态,不能直接使用 inject(它只能在 setup 或生命周期钩子中调用),但可通过“延迟执行”或“依赖注入上下文传递”来实现。核心思路是:把 inject 调用移入组件的 setup,再将注入值传给组合式函数。
组合式函数不直接调用 inject
inject 是一个运行时 API,必须在组件实例上下文中调用(即在 setup()、onBeforeMount 等钩子内)。若在纯函数作用域里直接调用,会报错 inject() can only be used inside setup()。
✅ 正确做法:由组件负责注入,再把响应式数据作为参数传入组合式函数。
- 组件中调用
const theme = inject('theme') - 将
theme传给useUserSettings(theme)或useModal({ theme }) - 组合式函数内部只做逻辑处理,不触碰注入逻辑
封装可注入的 Composable 工厂函数
若多个组件需相同注入行为,可写一个工厂函数,接收 key 和默认值,返回一个“待执行”的注入函数,由调用方在 setup 中触发:
vue-composition-api-best-practices
Vue 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
