1. @Builder:自定义构建函数
- 组件内构建函数定义:
@Builder componentBuildFunc(){}
自定义函数体中,this指当前所属组件,可以直接访问组件的状态变量
- 全局构建函数定义:
@Builder function globalBuildFunc(){}
如果不涉及组件状态变化,建议使用全局构建函数
2. @Builder参数传递规则 (按值传递和按引用传递)
- 参数类型与入参类型一致。
- @Builder函数体内,不允许改变参数值。
- 只有一个参数,且直接传入对象字面量才会按照引用传递,其余均为按值传递。
3. 入参传递
class TmpString {
paramsA: string = ''
}
@Entry
@Component
struct ComponentPage {
@State label: string = 'hello';
@Builder
buildText(params: TmpString) {
Text(`组件内引用入参${params.paramsA}`).fontSize(17).fontColor($r('app.color.text_black_color'))
}
buildText($$: TmpString) {
Text(`组件内引用入参${$$.paramsA}`)
...
}
@Builder
buildText2(text: string) {
Text(`组件内值入参${text}`).fontSize(17).fontColor($r('app.color.text_black_color'))
}
build(){
Column{
this.buildText({ paramsA: this.label })
this.buildText2(this.label)
}
}
}
4. 限制条件
- @Builder通过按引用传递的方式传入参数,才会触发动态渲染UI,并且参数只能是一个。
- @Builder如果传入的参数是两个或两个以上,不会触发动态渲染UI。
- @Builder传入的参数中同时包含按值传递和按引用传递两种方式,不会触发动态渲染UI。
- @Builder的参数必须按照对象字面量的形式,把所需要的属性一一传入,才会触发动态渲染UI。