鸿蒙开发中遇到容器相同、容器下面的子组件相同,就是子组件的文字不同,背景颜色不同,文字颜色不同之类,就可以使用Builder来封装,语法格式如下:
例如下面的界面:
Row+4个Colum+Image+Text来实现,发现呢?出来背景图和文字不同其他都是一样的,所以就可以把一样的抽取到一个方法里面,变的作为参数传递,代码如下:
// 全局 Builder @Builder function navItem(icon: ResourceStr, txt: string) { Column({ space: 10 }) { Image(icon) .width('80%') Text(txt) } .width('25%') .onClick(() => { AlertDialog.show({ message: '点了' + txt }) }) } @Entry @Component struct BuilderDemo { @State message: string = '@Builder'; @Builder navItem(icon: ResourceStr, txt: string) { Column({ space: 10 }) { Image(icon) .width('80%') Text(txt) } .width('25%') .onClick(() => { AlertDialog.show({ message: '点了' + txt + this.message }) }) } build() { Column({ space: 20 }) { Text(this.message) .fontSize(30) Row() { Row() { navItem($r('app.media.ic_reuse_01'), '阿里拍卖') navItem($r('app.media.ic_reuse_02'), '菜鸟') this.navItem($r('app.media.ic_reuse_03'), '巴巴农场') this.navItem($r('app.media.ic_reuse_04'), '阿里药房') } } } .width('100%') .height('100%') } }
总结:鸿蒙组价的封封装提供了三种实现分别是Extend、Styles、Builder,Extend需要指定具体的组件类型,支持参数,Styles更通用,不需要具体类型,不支持参数,Builder是界面构建层面的封装,支持参数,通用的代码包括Row和Colum和组件都封装在函数里