鸿蒙_引用自定义构建函数@BuilderParam在自定义组件中的使用

在ArkUI的学习中,通过@BuilderParam修饰的参数就是引用自定义构建函数,它可以接受一个自定义构建函数。当我们编写了一个自定义组件后,想要在使用时替换其中的某一部分UI内容,就可以在组件内部可以将这部分抽离放到自定义构建函数内,我们来验证一下如何使用:

TypeScript 复制代码
@Entry
@Component
struct TestBuilderParamInComponent {
  @State message: string = 'Test @BuilderParam In Component';

  //编写一个自定义构建函数,用于替换自定义组件的部分UI
  @Builder
  builderInMainPage() {
    Row() {
      Text('2、').fontColor(Color.Green)
      Text('将自定义构建函数作为参数传入组件')
    }
  }

  build() {
    Column() {
      Text(this.message)
        .margin({ bottom: 10 })
        .fontSize(18)
        .fontWeight(FontWeight.Bold)

      //不传参(如果自定义组件内的builderParamInComp加了@Require不传会报错)
      CompWithOneBuilderParam()

      //普通传参
      CompWithOneBuilderParam({
        builderParamInComp: this.builderInMainPage
      })

      //尾随闭包(在自定义组件后的大括号内直接写UI组件)
      CompWithOneBuilderParam() {
        Row() {
          Text('3、').fontColor(Color.Red)
          Text('通过尾随闭包方式直接传入组件')
        }
      }

    }
    .padding(10)
    .height('100%')
    .width('100%')
  }
}

//自定义组件
@Component
struct CompWithOneBuilderParam {
  //自定义构建函数
  @Builder
  builderInComp() {
    Text('1、自定义构建函数的默认内容')
  }

  //引用自定义构建函数(把自定义构建函数整体作为一个参数)
  //@Require
  @BuilderParam
  builderParamInComp: () => void = this.builderInComp;

  build() {
    Column({ space: 10 }) {
      Text('这是一个自定义组件').fontWeight(FontWeight.Bold)
      this.builderParamInComp()
    }
    .padding(10)
    .width('100%')
    .margin({ bottom: 10 })
    .border({ width: 1, color: Color.Blue })
  }
}

通过测试我们发现,如果自定义组件内部只包含一个引用自定义构建函数(@BuilderParam修饰的参数)时,还可以通过尾随闭包的方式使用,当有多个引用自定义构建函数时,只能通过普通传参方式使用。如果某个参数被@Require修饰了,那么该参数就是必传项,如果不写就会在编辑器内标红。


运行效果如下:

相关推荐
qizayaoshuap9 分钟前
# [特殊字符] 指南针 — 鸿蒙ArkTS方向计算与方位跟踪系统
华为·harmonyos
达子66625 分钟前
第5章_图解harmonyos Ability基础知识
华为·harmonyos
国服第二切图仔27 分钟前
02-breakpoint-system
运维·harmonyos
Helen_cai40 分钟前
EntryAbility 全局初始化 + 网络请求 HttpUtil 完整源码
网络·华为·harmonyos
SuperHeroWu743 分钟前
【HarmonyOS AI】DevEco CLI、Skills、知识库运用AI Coding提效详解
人工智能·华为·harmonyos
熊猫钓鱼>_>1 小时前
ArkUI 动画实战:从理论到交互,构建流畅的鸿蒙动效体验
华为·架构·交互·harmonyos·arkts·arkui·native
翰德恩咨询1 小时前
华为DSTE咨询洞察:如何撬动文化与氛围以支撑战略落地
华为·文化与氛围
Catrice01 小时前
HarmonyOS ArkTS 实战:实现一个校园宿舍电费查询与分摊应用
华为·harmonyos
2301_768103491 小时前
HarmonyOS趣味相机实战第31篇:图片文档List、详情弹层与删除状态闭环
list·harmonyos·arkts·状态管理·arkui
woshihuanglaoshi2 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统