鸿蒙_引用自定义构建函数@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修饰了,那么该参数就是必传项,如果不写就会在编辑器内标红。


运行效果如下:

相关推荐
AI_零食2 小时前
开源鸿蒙跨平台Flutter开发:研究生科研贡献雷达矩阵架构
学习·flutter·ui·华为·矩阵·开源·harmonyos
小雨天気.3 小时前
Flutter 框架跨平台鸿蒙开发 - 人生角色卡应用
flutter·华为·生活·harmonyos·鸿蒙
独特的螺狮粉3 小时前
开源鸿蒙跨平台Flutter开发:微波射频阻抗匹配系统-极坐标史密斯圆图与天线信号渲染架构
开发语言·flutter·华为·架构·开源·harmonyos
小雨天気.3 小时前
Flutter 框架跨平台鸿蒙开发 - 选择困难终结者应用
flutter·华为·生活·harmonyos·鸿蒙
djBe17esS4 小时前
HarmonyOS应用开发中EmbeddedUIExtensionAbility:跨进程 UI 嵌入的“幕后导演“
华为·harmonyos
世人万千丶4 小时前
开源鸿蒙跨平台Flutter开发:儿童语文认知与语义皮层映射引擎_视觉词形区与布洛卡网络渲染架构
flutter·华为·开源·harmonyos
小雨天気.4 小时前
Flutter 框架跨平台鸿蒙开发 - 每日一问应用
flutter·华为·生活·harmonyos·鸿蒙
互联网散修4 小时前
零基础鸿蒙应用开发第二十八节:商品排序体系之工厂与策略模式
策略模式·鸿蒙
Utopia^4 小时前
Flutter 框架跨平台鸿蒙开发 - 闪回相机
数码相机·flutter·华为·harmonyos