HarmonyOS 鸿蒙Next 自定义组件@BuilderParam 尾随闭包初始化后,链式调用属性时编译错误

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义组件@BuilderParam 尾随闭包初始化后,链式调用属性时编译错误

@Component
struct MyButton {
  @Prop label: string
  @Builder closerBuilder(){
    Text('slot')
  };
  [@BuilderParam](/user/BuilderParam) closer: VoidCallback = this.closerBuilder

  build() {
    Button() {
      Row({space: 12}) {
        Text(this.label)
        this.closer()
      }
    }
  }
}

@Entry
@Component
struct ComponentsPage {
  
  @Builder
  iconText(text:string) {
    Text(text)
  }

  build() {
    Column({space: 12}) {
      // 这里 onClick 不会报错
      MyButton({label: '默认'}).onClick(() => { console.log('默认') })
      
      MyButton({
        label: '正常', 
        closer: () => this.iconText('☝')}
      ).onClick(()=> { console.log('正常') })
      
      // 这里 onClick 报错:Cannot find name 'onClick'. Did you mean the instance member 'this.onClick'?
      MyButton({label: '男性'}) {
        Text('♂')
      }.onClick(() => { console.log('男性') })
    }
  }
}

请问这是什么原因?哪里部分文档有说明这个问题。

2 回复
把 MyButton 里的 Text 去掉

在HarmonyOS鸿蒙Next开发环境中,自定义组件使用@BuilderParam注解配合尾随闭包进行初始化时,如果遇到链式调用属性时编译错误的问题,这通常与构建器模式中的属性设置方法定义有关。

确保以下几点可能有助于解决问题:

  1. 构建器方法返回类型:构建器方法(用于链式调用的方法)必须返回构建器自身的实例类型(通常是当前类的一个实例)。检查是否所有设置属性的方法都返回了正确的类型。

  2. 注解使用正确@BuilderParam注解通常用于指定构建器参数,确保它的使用符合鸿蒙系统的要求,并且没有遗漏或错误地放置在非构建器参数上。

  3. 编译环境:确认使用的IDE和SDK版本是否支持当前的鸿蒙开发特性,以及是否所有依赖都已正确配置。

  4. 代码语法:检查代码语法是否正确,特别是链式调用的语法,确保没有拼写错误或类型不匹配。

如果以上检查均无误,但问题依旧存在,可能是IDE缓存问题或SDK的bug。尝试重启IDE、清理项目并重新构建,或检查鸿蒙系统的官方文档和更新日志,看是否有相关问题的修复或说明。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部