用户2952346
用户2952346
  • 发布:2026-03-03 11:27
  • 更新:2026-03-03 11:27
  • 阅读:18

【报Bug】uinapp 2 无法获取到自定义组件的实例(this.$refs.empty)

分类:uni-app

产品分类: uniapp/小程序/鸿蒙元服务

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: mac m1芯片

HBuilderX类型: 正式

HBuilderX版本号: 4.87

第三方开发者工具版本号: 4.87

基础库版本号: 2.0.2-4080720251210002

项目创建方式: HBuilderX

示例代码:

console.log(this.$refs.empty)

操作步骤:

正常获取组件的$refs

预期结果:

希望获取到组件的$refs实例

实际结果:

无法获取到,还报warn

bug描述:

元服务获取this.$refs.empty 会报warn ,并且获取不到自定义组件
warn 如下
[Vue warn]: Property or method "$" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.\n\n(found in pages/index/index.vue)
11:19:52.720 [Vue warn]: Property or method "type" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.\n\n(found in pages/index/index.vue)
11:19:52.720 [Vue warn]: Property or method "style" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.\n\n(found in pages/index/index.vue)
11:19:52.720 [Vue warn]: Property or method "getPropertyValue" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.\n\n(found in pages/index/index.vue)

2026-03-03 11:27 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

需要补充平台分类(安卓,ios,鸿蒙,小程序)和HBuilderX版本信息。
欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

作为 DCloud 官方人员,我对该 bug 反馈进行如下评审:


✅ 一、反馈内容完整性评估

项目 评估结果 说明
BUG 标题 ✅ 基本清晰 明确指出“无法获取自定义组件实例”,但“uinapp 2”应为“uni-app”,存在笔误。
BUG 描述 ⚠️ 不够详细 仅描述了现象(warn + 获取不到),未说明平台(如鸿蒙元服务)、组件结构、是否使用 Vue2 或 Vue3,也未提供组件注册方式。
代码示例 ❌ 不完整 仅提供 console.log(this.$refs.empty),未提供组件模板、ref 绑定方式、组件注册方式等关键信息。
复现步骤 ❌ 不清晰 “正常获取组件的$refs”过于笼统,未说明组件是否已渲染、是否在 mounted 中调用、是否为自定义组件等。
预期结果 ✅ 合理 获取组件实例是 Vue 正常行为,预期合理。
实际结果 ✅ 描述清楚 明确说明获取不到并伴随 warn。
分类信息 ⚠️ 缺失关键项 未说明运行平台(如鸿蒙元服务、App、H5)、Vue 版本(2 或 3)、组件是否为自定义组件。

⚠️ 二、是否误报或已知限制

根据知识库内容:

  • $refs 只能用于获取自定义组件,不能用于获取内置组件(如 viewtext);
  • ✅ 若平台为 鸿蒙元服务,需确认是否为 Vue2 或 Vue3 项目;
  • ✅ 若组件未正确注册或未渲染,$refs 可能为空;
  • ✅ 若使用了 v-if 或异步渲染,需在 this.$nextTick 中访问 $refs
  • ⚠️ 当前 warn 信息(如 $styletype 未定义)更像是 模板语法错误数据未声明,而非 $refs 本身的问题。

✅ 三、是否为基本概念问题

从 warn 内容来看:

[Vue warn]: Property or method "$" is not defined...

这类错误通常是因为模板中错误地使用了未定义的变量(如 $style$type 等),而非 $refs 本身的问题。建议用户检查模板中是否存在如下错误写法:

<view :class="$style.empty"> <!-- 错误:$style 未定义 -->

✅ 四、建议用户补充的信息

为确认是否为 bug,请用户补充以下内容:

  1. 运行平台:是否为鸿蒙元服务?还是 App/H5/小程序?
  2. Vue 版本:使用的是 Vue2 还是 Vue3?
  3. 组件结构
    • 是否使用了 <empty ref="empty" />
    • empty 是否为自定义组件?是否已注册?
  4. 调用时机
    • 是否在 mounted()this.$nextTick() 中访问?
  5. 完整代码片段
    • 包括模板、script、组件注册方式。

✅ 五、结论与建议

当前反馈不足以认定为 bug,更像是使用方式或模板语法问题。建议用户先自查以下内容:

  • 是否为自定义组件;
  • 是否在 mounted$nextTick 中访问;
  • 模板中是否存在未定义变量(如 $style$type);
  • 若仍无法解决,请提供最小复现工程,我们将进一步排查。

如需进一步协助,请补充上述信息或上传复现工程至 DCloud 社区

内容为 AI 生成,仅供参考

要回复问题请先登录注册