uni-app 抖音小程序provide/inject传值无效

uni-app 抖音小程序provide/inject传值无效

操作步骤:

  • 父组件provide数据给子组件
    onMounted(() => provide('test23', '咋不行'));
    

预期结果:

  • 子组件通过inject获取数据,应该获取到而没有获取到
    onMounted(() => {
      attributeGroupContext.value = inject('test23');
    });
    
    attributeGroupContext.value = '咋不行'
    

实际结果:

  • 就是不行,没有报错,inject出来没有数据。
    attributeGroupContext.value = undefined
    

bug描述:

  • 抖音小程序provide/inject传值无效,之前3.0的版本,使用onMounted包一层可以将就用,升级到4.0后就不行了。
  • 版本从3.0.0-3090620231104002 升级到 3.0.0-4060620250520001,抖音父子组件传值直接失效。
信息类型 信息内容
产品分类 uniapp/小程序/抖音
PC开发环境 Windows
PC开发环境版本 Windows 11 专业版
第三方工具版本 v4.4.1
基础库版本 3.73.0.4
项目创建方式 CLI
CLI版本 3.0.0-4060620250520001

image


更多关于uni-app 抖音小程序provide/inject传值无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

19 回复

hello, 请提供一下一个可以复现的测试项目

更多关于uni-app 抖音小程序provide/inject传值无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没法提供呀,公司的项目,线上用的也是3.0的版本

回复 青色: 你可以新建一个项目提供一下,能复现即可

经测试,具有provide/inject传值的组件,在组件中使用不行,在页面中直接使用可以。

我尝试运行了你的代码,看起来与你给出的结果不一致的

不一致,是有那些地方有调整吗

应该不是调整的问题,我使用的就是4.66 的依赖运行的,但是确实能显示出来的

你发的代码我原封不动运行的

回复 DCloud_UNI_yuhe: 很奇怪了,我其他几个同事运行出来和我的一样就没有显示

回复 DCloud_UNI_yuhe: 可以的话,多找个人试一下呢。也可以确认一下node_modules中插件的版本,我们跑出来就是不行,暂时只能用3.0.0-3090620231104002对抖音进行打包了

回复 青色: 你新建一个项目运行代码看看呢,排除你项目中其它的影响因素看看

回复 DCloud_UNI_yuhe: 新建项目也试了,还是不行,我不知道你哪里为什么可以

那这个还挺恶心的,我只有切回3.0.0-3090620231104002才是正常的,本地也是直接yarn了之后直接run的。

本地相关信息: windows: Windows 11 专业版 node: v20.12.2 yarn: v1.22.22 vscode: v1.101.2 抖音开发工具:v4.4.1

node版本升级到v22.11.0,依然没用

步骤: 1、npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project 2、npx @dcloudio/uvm@latest 3、引入sass"sass": “1.77.6”, “sass-loader”: “10.4.1”
测试结果没变,还是不行,所以官方认为是对的不需要排查解决吗

通过降版本问题已解决:希望有帮助 1、3.0.0-4020920240930001
通过官方命令升级到指定版本: npx @dcloudio/uvm@latest 3.0.0-4020920240930001

在 uni-app 抖音小程序中,provide/injectonMounted 中调用可能导致数据传递失败,因为 onMounted 是组件挂载后的生命周期,而 provide 应在 setup 阶段或 onBeforeMount 中执行,以确保数据在子组件初始化时可用。

建议将 provide 移到 setup 函数中:

setup() {
  provide('test23', '咋不行');
}

如果数据依赖响应式状态,使用 refreactive 包装:

const testValue = ref('咋不行');
provide('test23', testValue);

子组件的 inject 调用也应在 setup 中:

setup() {
  const attributeGroupContext = inject('test23');
  return { attributeGroupContext };
}
回到顶部