HarmonyOS App(ArkUI)使用父组件@Builder装饰的方法初始化子组件@BuilderParam报错
Type 'void' is not assignable to type '() => void'. <tsCheck>
去掉括号()就可以了
- 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。
- UI描述:以声明式的方式来描述UI的结构,例如build()方法中的代码块。
- 自定义组件:可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello。
- 系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的Column、Text、Divider、Button。
- 属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。
- 事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。
- 系统组件、属性方法、事件方法具体使用可参考基于ArkTS的声明式开发范式。
除此之外,ArkTS扩展了多种语法范式来使开发更加便捷:
- @Builder/@BuilderParam:特殊的封装UI描述的方法,细粒度的封装和复用UI描述。
- @Extend/@Styles:扩展内置组件和封装属性样式,更灵活地组合内置组件。
- stateStyles:多态样式,可以依据组件的内部状态的不同,设置不同样式
index.ets
@Builder function MyGlobalBuilderFunction(){ }
@Component
struct child{
@BuilderParam customBuilder:()=>void;
build(){
this.customBuilder()
}
}
@Entry
@Component
struct Index {
@State message: string = 'HelloWorld'
@State count: number = 666
@State size2:number =12
@State counter:number =0;
@Builder MyBuilderFunction(){
Text('aa')
}
fn =()=>{
console.info('开始计数:'+ this.counter.toString())
this.message = this.counter.toString()
this.counter++
}
build() {
Row() {
Column() {
child({customBuilder:this.MyBuilderFunction})
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Divider()
Button("click me").onClick(()=>{
this.message ="this is ArkUI"
})
Text($r('app.string.title_value'))
.fontSize(50)
.fontWeight(FontWeight.Bold)
Divider()
Text($r(this.count.toString())).fontSize(this.size2)
.fontColor(Color.Red)
.fontWeight(FontWeight.Bold)
Button("add counter")
.onClick(function(){
this.message = "abc";
this.counter +=2;
this.message = $r(this.counter.toString());
}.bind(this))
Button('开始计数').onClick(this.fn)
}
.width('100%')
}
.height('100%')
}
}