ArkTS @Builder装饰器的用法(非常详细)
在开发的过程中,当页面中有多个相同的 UI 结构时,如果每个都单独声明,会造成大量的重复代码。为了避免产生重复的代码,我们可以将相同的 UI 结构提炼为一个自定义组件,用于完成 UI 结构的复用。
ArkTS 提供了一种更轻量的 UI 结构复用机制,叫做 @Builder 装饰器。开发者可以将重复使用的 UI 元素抽象成一个 @Builder 方法,该方法可在 build() 方法中多次调用,以完成 UI 结构的复用。
@Builder 的使用分为组件内的使用和全局的使用,下面通过两个例子来进行讲解。
示例代码如下:
效果如下图所示:

图 1 @Builder 在组件内的使用
示例代码如下:
ArkTS 提供了一种更轻量的 UI 结构复用机制,叫做 @Builder 装饰器。开发者可以将重复使用的 UI 元素抽象成一个 @Builder 方法,该方法可在 build() 方法中多次调用,以完成 UI 结构的复用。
@Builder 的使用分为组件内的使用和全局的使用,下面通过两个例子来进行讲解。
ArkTS @Builder在组件内的使用
@Builder 在组件内使用的语法是:- 定义结构时要放在 struct 的里面进行定义,也就是在组件内定义;
- 定义的语法是:@Builder xxxx(){ ... },其中 xxxx 是自定义的名称;
- 在组件内使用“this.自定义名称”的方式进行使用,如 this.xxxx()。
示例代码如下:
@Entry
@Component
struct Demo_Builder_in {
@State message: string = 'Hello World';
build() {
Column() {
Row({ space: 50 }) {
// 复用 UI 结构
this.compButtonBuilder('编辑', () => console.log('编辑'));
this.compButtonBuilder('发送', () => console.log('发送'));
}
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center);
}
// 定义 UI 结构
@Builder compButtonBuilder(text: string, callback: () => void) {
Button() {
Row({ space: 10 }) {
Text(text)
.fontColor(Color.White)
.fontSize(25);
}
}
.width(120)
.height(50)
.onClick(callback);
}
}
在示例代码中,在 build 的同级中使用 @Builder 来装饰一个自定义的函数名称,用来定义 UI 结构,自定义函数接收两个参数,text 和事件回调;在 build 组件中使用“this.自定义函数名”的方式来复用我们定义的UI结构。效果如下图所示:

图 1 @Builder 在组件内的使用
ArkTS @Builder在全局的使用
@Builder 在全局的使用与在UI组件内部的使用是有一些区别的,主要区别如下:- 定义结构时要放在 struct 的外面进行定义,也就是在全局定义;
- 定义的语法是:@Builder function xxxx(){},其中 xxxx 是自定义的名称;
- 直接在组件内使用自定义名称即可,如 xxxx()。
示例代码如下:
// 全局定义 UI 结构
@Builder function globalButtonBuilder(text: string, callback: () => void) {
Button() {
Row({ space: 10 }) {
Text(text)
.fontColor(Color.White)
.fontSize(25);
}
}
.width(120)
.height(50)
.onClick(callback);
}
@Entry
@Component
struct Demo_Builder_global {
@State message: string = 'Hello World';
build() {
Column() {
Row({ space: 50 }) {
// 复用 UI 结构
globalButtonBuilder('编辑', () => console.log('编辑'));
globalButtonBuilder('发送', () => console.log('发送'));
}
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center);
}
}
在上述示例代码中,在 struct 的外面使用 @Builder function xxxx(){} 来定义 UI 结构,自定义函数接收两个参数,text 和事件回调;在 build 的组件中使用自定义函数名的方式来复用我们定义的 UI 结构。效果如图 1 所示。
ICP备案:
公安联网备案: