2***@qq.com
2***@qq.com
  • 发布:2022-06-28 18:14
  • 更新:2022-06-29 10:32
  • 阅读:369

【报Bug】一个关于组件extends的BUG

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10.0.19043 内部版本 19043

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

基础库版本号: 0.0.1

项目创建方式: CLI

CLI版本号: uni-preset-vue-master

示例代码:

依赖版本:
"vue": "^2.6.11",
"vue-class-component": "^6.3.2",
"vue-property-decorator": "^8.0.0",
"sass": "^1.53.0",
"sass-loader": "^10.2.1",
"typescript": "^3.0.0",
"vue-template-compiler": "^2.6.11"

操作步骤:

一、首先我注册了一个BaseComponent组件作为我的基类(以下简称基类),它包含一些属性和方法。
图
二、我注册了一个Index组件它继承至基类,并log了一下基类中的info属性,它成功在控制台中被打印出来"Hello Word"
图

图
。现在它一切都是正常的。
三、现在我需要在Index组件中引入子组件(Test),子组件Test是这样的
图
。然后在Index组件中注册
图
,最后运行结果
图
。它现在依然是正常的。
四、以上需求能正常运行,但在开发中不能满足。我期望是所有组件都能继承我的基类,想象一下基类可以作为所有组件的控制器(当然不局限于),还可以做什么?扩展基类! 假设我有一些工具方法很多组件都能使用到,我完全可以创建一个叫UtilsComponent的组件继承至BaseComponent组件(基类),这样的话需要使用工具方法的组件继承UtilsComponent的组件不就可以访问了吗?而且BaseComponent组件(基类)中的信息也可以访问这非常好!不对吗? 可惜我遇到了一个问题,回到刚才第三步,我将Test组件继承至基类
图
然后HBuilder中编译完全正常
图
。然后我运行H5
图
wow!!!完全没问题。我再打开微信小程序
图
,我靠这什么情况??报错了?? 然后我再将Test组件中的两段代码去掉
图

图
然后再看小程序
图
???又正常了。
我开始跟踪错误...
图
定位到错误...
图

图
怎么会??不应该会出现这个错丫? 这个moduleId参数169应该有的丫 然后我搜索了一下169
图
我靠怎么只有一个169?? 在搜一下148看看
图
,对比发现169(基类)压根没被打包到里面!!!! 至此我无解!
五、基于上面的分析,我再一次做了测试。同样更改Test组件中的代码
图

图
再查看小程序
图
这下又正常了。
六、最后总结一下这次的发现(BUG)。我也是测试了很久,找了很多资料,都没有对这方面的答案(也可能是大家很少使用类继承的方式)。这个bug可以简单理解成 A组件它继承了B组件,A组件的子组件C也继承了B组件,那么小程序中会报错!!!
调试:经过系列测试,有一个办法能解决上面问题,那就是将Test组件局部注册改为全局注册
图

图

图
这样做小程序也能正常运行
图
。但是当项目越来越大,这种方式不可取!!!
写在最后:这个问题纠结我半天了,这是一个瑕疵!!! 有大佬遇到过这个问题且成功解决没有(存在xxx配置...),解决了请联系我

预期结果:

我期望是所有组件都能继承我的基类,想象一下基类可以作为所有组件的控制器(当然不局限于),还可以做什么?扩展基类! 假设我有一些工具方法很多组件都能使用到,我完全可以创建一个叫UtilsComponent的组件继承至BaseComponent组件(基类),这样的话需要使用工具方法的组件继承UtilsComponent的组件不就可以访问了吗?而且BaseComponent组件(基类)中的信息也可以访问这非常好!

实际结果:

A组件它继承了B组件,A组件的子组件C也继承了B组件,最终H5正常运行,小程序中会报错!!!

bug描述:

简单理解为 A组件它继承了B组件,A组件的子组件C也继承了B组件,最终H5正常运行,小程序中会报错!!!

2022-06-28 18:14 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com (作者)

各位大佬们帮帮忙涩。

该问题目前已经被锁定, 无法添加新回复