uni-app开发时提示[Vue warn]: injection "xxx" not found.,但在web、微信小程序均正常
uni-app开发时提示[Vue warn]: injection “xxx” not found.,但在web、微信小程序均正常
项目信息 | 详细信息 |
---|---|
产品分类 | uniapp/小程序/字节跳动 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 22H2 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.98 |
第三方开发者工具版本号 | 4.1.6 |
基础库版本号 | 3.1.0.7 |
项目创建方式 | HBuilderX |
操作步骤:
- 使用provide往子组件传递信息,子组件无法接收到信息且提示injection “xxx” not found,如
- 父组件:provide(“message”, “消息”)
- 子组件:const message = inject(“message”, null)
- 但是在main.js内往全局注册一个provide子组件是可以收到的,如
- const app = createSSRApp(App)
- app.provide(“message”, “消息”)
- 同时在web端和微信小程序端也是可以正常父子组件传递,该问题只存在于抖音小程序
预期结果:
- 子组件应收到父组件传递的信息
实际结果:
- 子组件无法接收到信息且提示injection “xxx” not found
bug描述:
- 使用provide往子组件传递信息,子组件无法接收到信息且提示injection “xxx” not found,如
- 父组件:provide(“message”, “消息”)
- 子组件:const message = inject(“message”, null)
- 但是在main.js内往全局注册一个provide子组件是可以收到的,如
- const app = createSSRApp(App)
- app.provide(“message”, “消息”)
- 同时在web端和微信小程序端也是可以正常父子组件传递,该问题只存在于抖音小程序
2 回复
参考该issue,使用Options Api
在 uni-app 开发过程中,如果你遇到 [Vue warn]: injection "xxx" not found.
的警告,但在 Web 和微信小程序中表现正常,这通常是因为某些平台(如 H5 或小程序)对 Vue 的依赖注入机制的支持不完全一致,或者某些插件或库在不同平台下的行为不一致。
以下是一些可能的原因和解决方法:
1. 检查依赖注入的提供者(Provider)是否存在
- 确保你在父组件中正确使用了
provide
提供了需要注入的值。 - 例如:
export default { provide() { return { xxx: this.someValue }; } };
- 如果
provide
没有正确设置,子组件在尝试注入时会抛出警告。
2. 检查注入的键名是否正确
- 确保子组件中
inject
的键名与父组件中provide
的键名完全一致。 - 例如:
export default { inject: ['xxx'] };
3. 平台差异
- 某些平台(如 H5 或小程序)可能对 Vue 的依赖注入机制支持不完全,或者某些插件在不同平台下的行为不一致。
- 解决方法:
- 检查是否有平台特定的代码逻辑,确保在所有平台下都能正确提供和注入值。
- 使用
#ifdef
条件编译来处理平台差异:#ifdef H5 provide() { return { xxx: this.someValue }; } #endif
4. 插件或库的问题
- 如果你使用了第三方插件或库,可能是该插件在某些平台下未正确提供依赖注入的值。
- 解决方法:
- 检查插件的文档,确认其是否支持所有目标平台。
- 如果插件有问题,可以尝试手动提供缺失的值,或者联系插件作者。
5. 生命周期问题
- 确保
provide
的值在子组件尝试注入时已经准备好。 - 如果
provide
的值是异步获取的,可能会导致子组件在初始化时无法找到注入的值。 - 解决方法:
- 使用
watch
或computed
来动态更新provide
的值。 - 例如:
export default { data() { return { someValue: null }; }, async created() { this.someValue = await fetchSomeData(); }, provide() { return { xxx: this.someValue }; } };
- 使用