uni-app 抖音小程序 通过ref获取组件实例报错,this.refs.xxx是undefined

uni-app 抖音小程序 通过ref获取组件实例报错,this.refs.xxx是undefined

示例代码:

this.$nextTick(() => {
this.$refs.bikeDialog.closeTip();
})

操作步骤:

this.$nextTick(() => {
this.$refs.xxDialog.closeTip();
})

预期结果:

xxDialog组件的closeTip方法正常执行

实际结果:

this.$refs.xxDialog是undefined,导致调用this.$refs.xxDialog.closeTip();报错

bug描述:

抖音小程序 通过ref获取组件实例报错,this.refs.xxx是undefined

微信小程序和支付宝小程序是正常的。


### 表格

| 信息类别     | 内容                           |
|--------------|-------------------------------|
| 产品分类     | uniapp/小程序/抖音             |
| PC开发环境   | Mac                           |
| 操作系统版本 | 14.6.1 (23G93)                |
| HBuilderX类型| 正式                          |
| HBuilderX版本| 4.75                          |
| 工具版本号   | Version: 4.4.2                |
| 基础库版本   | 3.75.0.6                      |
| 项目创建方式 | HBuilderX                     |

更多关于uni-app 抖音小程序 通过ref获取组件实例报错,this.refs.xxx是undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

是升级之后导致的?升级之前正常吗?

更多关于uni-app 抖音小程序 通过ref获取组件实例报错,this.refs.xxx是undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没有升级,之前是微信小程序和支付宝小程序,业务正常运转,现在需要适配抖音小程序。 版本号:2.0.2-4010520240507001

我也尝试用HbuilderX去跑项目,也是一样的报错。

我看了抖音的开发者文档,抖音是支持ref获取组件实例的 https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/tutorial/custom-component/ref

回复 1***@qq.com: 提供一下一个代码片段,看一下你是咋用的

在抖音小程序中,$refs 获取组件实例为 undefined 是已知的平台差异问题。抖音小程序对组件实例的获取时机和方式与微信、支付宝小程序存在差异。

解决方案:

  1. 使用 $nextTick 确保渲染完成
this.$nextTick(() => {
  if (this.$refs.xxDialog) {
    this.$refs.xxDialog.closeTip();
  }
});
  1. 添加空值判断
setTimeout(() => {
  if (this.$refs.xxDialog) {
    this.$refs.xxDialog.closeTip();
  }
}, 50);
  1. 检查组件渲染条件 确保组件在调用 closeTip 时已渲染:
// 在 data 中定义控制变量
data() {
  return {
    showDialog: false
  }
},
methods: {
  openDialog() {
    this.showDialog = true;
    this.$nextTick(() => {
      this.$refs.xxDialog.closeTip();
    });
  }
}
回到顶部