HarmonyOS 知识积累/踩坑指南(持续汇总常见问题)

573 阅读2分钟

开始学习鸿蒙开发,持续整理学习过程中发现的一些常见问题,仅此记录汇总,如能帮助大家定位问题更好~~~ 也欢迎大家在评论区留言自己所遇到的问题,我也可以更新到这~~~

自定义组件-自定义容器组件

常见错误:

'TestWidget' must have one and only one property decorated with @BuilderParam, and its @BuilderParam expects no parameter.

以下代码可以解决此错误。

Component 版本

要想自定义一个支持添加子组件的容器组件,如何实现呢?

代码如下:


@Component
struct Test {
  @BuilderParam child: () => object;
  name: string = "" // name 表示的是支持外部传入的参数变量

  build() {
    this.child()
  }
}

核心是: @BuilderParam child: () => object;

BuilderParam 修饰符的使用,声明 属性 child,返回一个对象。 组件添加 child 属性后,表示该组件具备了额外添加子组件的能力,接下来在需要添加子组件的地方使用 child 属性做占位即可。

之后,在你需要使用 TestWidget 的地方,正常插入子组件就行了,类似与 在 Row() 中插入一个 Text()似的

如何使用:


// 调用
@Component
struct TestCall {
  build() {
    Test({ name: "名字" }) {
      Text("Hello")
    }
  }
}

ComponentV2 版本

解释的话不多说,直接上代码 重点在于: @Param nameV2: string = "" 变量,需要额外用 @Param 修饰符来修饰一下子 @Param 装饰器的相关说明,参考官方文档:developer.huawei.com/consumer/cn…

定义组件:


@ComponentV2
struct TestV2 {
  @BuilderParam child: () => object;
  @Param nameV2: string = ""

  build() {
    this.child()
  }
}

调用:


// 调用
@Component
struct TestCallV2 {
  build() {
    TestV2({ nameV2: "222" }) {
      Text("Hello")
    }
  }
}

DevEco Studio 编译报错日志不明确

在使用 DevEco Studio 编译时,如果报错日志不直观,只有简短的几句话,很难具体定位,比如如下默认报错信息,鬼知道到底是啥原因。。。

guide 1

这个时候,只需要打开一个配置开关,就可以输出详细的错误日志了,具体位置在:

hvigor -> hvigor-config.json5 中
将下边属性设置为 true 就行了

"debugging": {
    "stacktrace": true     // 是否启用堆栈跟踪。默认值false     
},

打开开关后,再来看日志输出,是不是详细了太多太多。。。。

guide 2