美文网首页Web前端之路ArkTS/ArkUI实战1024
49、鸿蒙/@BuilderParam装饰器:引用@Builde

49、鸿蒙/@BuilderParam装饰器:引用@Builde

作者: 圆梦人生 | 来源:发表于2024-08-13 15:41 被阅读0次

当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量(@BuilderParam是用来承接@Builder函数的),开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰器用于声明任意UI描述的一个元素,类似slot占位符。

装饰器使用说明

初始化@BuilderParam装饰的方法

@BuilderParam装饰的方法只能被自定义构建函数(@Builder装饰的方法)初始化。如果在API 11中和@Require结合使用,则必须父组件构造传参。

  • 使用所属自定义组件的自定义构建函数或者全局的自定义构建函数,在本地初始化@BuilderParam。
@Builder function overBuilder() {}

@Component
struct Child {
  @Builder doNothingBuilder() {};

  // 使用自定义组件的自定义构建函数初始化@BuilderParam
  @BuilderParam customBuilderParam: () => void = this.doNothingBuilder;
  // 使用全局自定义构建函数初始化@BuilderParam
  @BuilderParam customOverBuilderParam: () => void = overBuilder;
  build(){}
}
  • 需注意this指向正确。
    以下示例中,Parent组件在调用this.componentBuilder()时,this指向其所属组件,即“Parent”。
    @Builder componentBuilder()通过this.componentBuilder的形式传给子组件@BuilderParam customBuilderParam,this指向在Child的parStr,即“子组件”。
    @Builder componentBuilder()通过():void=>{this.componentBuilder()}的形式传给子组件@BuilderParam customChangeThisBuilderParam,因为箭头函数的this指向的是宿主对象,所以parStr的值为“hello”。

  • ParentBuilderParam.ets父文件

// 导入子组件
import { ChildBuilderParam } from './ChildBuilderParam'

@Component
export struct ParentBuilderParam {
  @State parStr: string = `hello`;
  //
  @Builder componentBuilder() {
    Text(`${this.parStr}`)
  }
  //
  build() {
   Column(){
     //
     this.componentBuilder();
     //
     ChildBuilderParam({
       // this指向的是子组件Child,
       customBuilderParam: this.componentBuilder,
     })
     ChildBuilderParam({
       // 因为箭头函数的this指向的是宿主对象,所以parStr变量的值为"Parent"。
       customBuilderParam: (): void => { this.componentBuilder() }
     })
    //
     Button('点击').onClick((event: ClickEvent) => {
       console.log('点击改变值');
       this.parStr = '哈哈'
     })
   }
  }
}
  • ChildBuilderParam.ets文件
@Component
export struct ChildBuilderParam {

  @State parStr: string = `子组件`;

  @Builder customBuilder() {};
  // 使用父组件@Builder装饰的方法初始化子组件@BuilderParam
  @BuilderParam customBuilderParam: () => void = this.customBuilder;
  build() {
    Column(){
      this.customBuilderParam();
    }
  }
}

效果

BuilderParam.png

相关文章

  • 浅析装饰器的那些事儿

    一、装饰器的简单定义 外层函数返回里层函数的引用,里层函数引用外层函数的变量。 二、装饰器的作用 通俗来讲装饰器的...

  • 函数装饰器执行顺序

    当一个函数有多个装饰器时,会优先执行离函数最近的装饰器,由于装饰器返回的是函数的函数名引用,并非真正调用函数。

  • 装饰器

    1.装饰器的概念 装饰器是一个闭包:内层函数引用外层函数的变量(参数也算变量),然后返回内层函数,就是闭包。装饰器...

  • python装饰器理解

    阅读顺序: 函数引用 函数闭包 装饰器(最好先阅读上面的两个) 1.函数引用 2.函数闭包 3.装饰器 背景:一般...

  • Mybatis的这两个缓存装饰器不要忽略

    Mybatis的这两个缓存装饰器不要忽略这篇文章继续介绍聊聊Mybatis的缓存的其他装饰者 引用的缓存装饰器So...

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • Python装饰器

    一, 引用 [书] 流畅的Python[书] Effective Python 二, 基本概念 问题1:装饰器是什...

  • python——装饰器详解

    一、装饰器概念 1、装饰器 装饰器:一种返回值也是一个函数的函数,即装饰器。 2、装饰器目的 装饰器的目的:装饰器...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

网友评论

    本文标题:49、鸿蒙/@BuilderParam装饰器:引用@Builde

    本文链接:https://www.haomeiwen.com/subject/jeiahjtx.html