HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用
HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用
有一个需求,需要使用到@builder,开发体验不是很流畅。
问题场景:
0.API9 deveco版本:
-
有三个按钮A、B、C。设置bindmenu属性,点击后,弹出指令菜单。单个按钮的菜单,两两部分重叠。
-
想通过在一个单独的文件中,把有重叠的指令,独立成一个@builder导出,然后在目标UI文件中import使用,以实现指令复用,避免每个指令在三个按钮的菜单中重复定义。
出现问题:
-
定义在全局的@builder无法被用做属性设置,不能在bindmenu的属性中引用xiugai() 对象(这样说可能不准确,只是代码提示选项框不会提示)。
-
经过测试,发现其实是可以导出使用的。在其他文件引入后,在属性设置时,代码提示选项框不会提示,但是可以手动输入,通过模拟器测试,功能正常。真机未测试。
-
但是不能定义在namespace中,这样在使用时就必须得每个builder对象都在import中输入一次,如果重名了,还得改名字,有时候挺麻烦的。
关于@builder装饰的对象被引用这个需求,个人感觉越复杂、越大型的应用开发中,越是需求。为了给用户提供便捷体验,很多指令需要重复出现,但是不在同一个页面中。例如退出功能,可能在任何地方都要求可以快速点击退出,退出功能对这个需求还不是很强烈。
但是当有非常多的指令(例如100个),并且在每个地方都只是成套出现其中一些指令(文本编辑:修改、复制、另存,移动:移动到集合a、移动到集合b、移动到集合c,等等),就很需要了。这样就可以在一个builder文件中,系统的实现指令,然后成套的指令单独写成一个@builder对象中,这样就可以在需要这一套指令的地方引用。也方便后期修改,比如需要删除某套指令中的一个时,只需要在那个builder文件中,修改这套指令对应的@builder对象即可,不然得在每个使用这套指令的地方去修改,可能还会出现地方没找全,漏改这种情况,导致软件发布后才发现,然后反复更新软件。
还有个情况,感觉似乎很多装饰器装饰的对象都不能导出使用,例如@extends、@style。struct关键字对象可以导出,但是只能作为组件,并且内部对象无法在外部使用。
还想请教下,导出的@builder在真机上能否正常交互,我的真机太卡,无法测试。
更多关于HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next 关于全局@builder装饰器的对象,无法正常导出给其他文件使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
- 输出文件:
@Builder export function name() {...}
- 导入文件:
import {name} from '...'
实测真机可用 - 关于智能提示问题,估计导入只是名字,没有类型信息,因此在预期CustomBuilder的位置无法智能提示,可提单建议IDE改进;
收到,非常感谢帮忙测试。
在HarmonyOS中,@builder
装饰器用于定义UI组件的构建函数。如果你遇到@builder
装饰的对象无法正常导出给其他文件使用的问题,可能是由于以下几种原因:
-
作用域问题:
@builder
装饰的函数或对象可能未正确导出或导入。确保在导出文件中使用export
关键字,在导入文件中使用import
关键字。 -
模块解析问题:检查模块路径是否正确,确保导出的模块路径与导入的模块路径一致。
-
类型声明问题:如果使用了TypeScript或类似的语言,检查类型声明是否正确,确保导出的类型与导入的类型一致。
-
编译问题:在某些情况下,编译工具可能未正确处理
@builder
装饰器的导出。检查编译配置,确保编译工具支持@builder
装饰器的导出。
确保导出的@builder
对象在导入文件中能够正常使用,检查上述问题并逐一排除。