常规的自定义组件只进行数据相关的传递,而被@Builder装饰器所修饰的方法,是一个将UI元素抽象化的方法,可以在自定义组件的 build() 函数中使用,从而可以做到使用方法来创建UI元素的操作
语法如下:
@Builder MyBuilderFunction1() {...} // 此处的MyBuilderFunction1为方法名
使用方法如下:
this.MyBuilderFunction1()
需要注意的地方:
语法如下:
@Builder function MyBuilderFunction2() {...} // 此处的MyBuilderFunction2为方法名
使用方法如下:
MyBuilderFunction2()
需要注意的地方:
按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新
格式如下:
// 创建时
@Builder MyBuilder1( $$ : { param1: string, param2 : string } ) {
Text($$.param1);
Text($$.param2);
};
// 调用时
MyBuilder({param1:...,param2:...})
实例演示:
@Builder function MyBuilder($$: { str: string }) {
Text($$.str)
}
@Entry
@Component
struct MyComponent {
@State name: string = 'Richie';
build() {
Column() {
MyBuilder({ str: this.name });
Divider();
Button("更改姓名")
.onClick(() => {
this.name = 'Taylor'
})
.margin({ top: 100 })
}
}
}
点击按钮后UI刷新了:
调用@Builder装饰的函数默认按值传递,当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新,所以当使用状态变量的时候,推荐使用按引用传递
格式如下:
// 创建时
@Builder MyBuilder1(param1: string, param2 : string) {
Text(param1);
Text(param2);
};
// 调用时
MyBuilder('Richie','Taylor')
实例演示:
@Builder function MyBuilder(param1:string) {
Text(param1);
}
@Entry
@Component
struct MyComponent {
@State name: string = 'Richie';
build() {
Column() {
MyBuilder(this.name);
Divider();
Button("更改姓名")
.onClick(() => {
this.name = 'Taylor'
})
.margin({ top: 100 })
}
}
}
点击按钮后UI没有刷新: