【高心星出品】
@builder 构建函数
ArkUI 还提供了一种更轻量的 UI 元素复用机制 @Builder,@Builder 所装饰的函数遵循 build()函数语法规则,开发者可以将重复使用的 UI 元素抽象成一个方法,在 build 方法里调用。
组件内构建函数
@Entry
@Component
struct Test1 {
@State message: string = 'Hello World'
// 构建组件内ui
@Builder gentext(txt){
Text(txt)
.border({width:1,radius:5,color:Color.Red})
.fontSize(22)
.padding(5)
.width('100%')
}
build() {
Row() {
Column() {
// 使用组件内ui
this.gentext(this.message)
}
.width('100%')
}
.height('100%')
}
}
复制代码
全局构建函数
/**
*作者:gxx
*日期:2024-03-13 18:41:57
*介绍:
*全局builder构建
**/
@Builder export function gentext(txt){
Text(txt)
.border({width:1,radius:5,color:Color.Blue})
.fontSize(22)
.padding(5)
.width('100%')
}
复制代码
import { gentext } from '../components/builders'
@Entry
@Component
struct Test1 {
@State message: string = 'Hello World'
// 构建组件内ui
@Builder gentext(txt){
Text(txt)
.border({width:1,radius:5,color:Color.Red})
.fontSize(22)
.padding(5)
.width('100%')
}
build() {
Row() {
Column() {
// 使用组件内ui
this.gentext(this.message)
// 使用全局builder
gentext(this.message)
}
.width('100%')
}
.height('100%')
}
}
复制代码
构建函数传参
按值传递参数
上面的案例就是使用了按值传递,函数内只是获取了值。如果数据发生变化,组件不会刷新。
按引用传递参数
按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起 @Builder 方法内的 UI 刷新。ArkUI 提供 $$作为按引用传递参数的范式。
interface param{
txt:string
}
// 按引用传递
@Builder export function gentext1($$:param){
Text($$.txt)
.border({width:1,radius:5,color:Color.Blue})
.fontSize(22)
.padding(5)
.width('100%')
}
复制代码
// 按照引用传递
gentext1({txt:this.message})
Button('修改')
.width('60%')
.onClick(()=>{
// 修改当前值会引起builder构建界面改变
this.message='hello arkui'
})
复制代码
评论