openharmony 鸿蒙 ts-universal-mutableBuilder

2026-08-25 浏览 (1)

mutableBuilder

使用mutableBuilder封装全局@Builder,实现全局@Builder的动态切换。开发指南见mutableBuilder:实现全局@Builder动态更新

说明:

本模块首批接口从API version 22开始支持。

后续版本的新增接口,采用上角标单独标记接口的起始版本。

mutableBuilder

mutableBuilder<Args extends Object[]>(builder: BuilderCallback): MutableBuilder<Args>

mutableBuilder是一个模板函数,它返回一个MutableBuilder对象,只接受一个全局的@Builder函数作为其参数。

该函数返回的MutableBuilder对象中,builder属性方法只能在自定义组件内部使用。

原子化服务API: 从API version 22开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
builderBuilderCallback@Builder装饰的全局函数。

返回值:

类型说明
MutableBuilder<Args>MutableBuilder<Args>的实例,用于全局@Builder进行赋值和传递的类,实现全局@Builder的动态更新。

示例:

class TextContent {
  text: string = '';
}

@Builder
function textBuilder(p: TextContent) {
  Text(p.text).margin(20)
}

@Builder
function buttonBuilder(p: TextContent) {
  Button(p.text).margin(20)
}

let counter: number = 1;
@Entry
@ComponentV2
struct MyApp {
  @Local message: string = 'init';
  @Local switchingBuilder: MutableBuilder<[TextContent]> = mutableBuilder(textBuilder);
  build() {
    Column() {
      this.switchingBuilder.builder({ text: this.message })
      Button('Click to change')
      .onClick(() => {
        counter++; // 每次点击按钮修改counter来动态改变全局@Builder
        if(counter % 2 === 0) {
          this.message += 'B';
          this.switchingBuilder = mutableBuilder(buttonBuilder); // textBuilder--->buttonBuilder
        } else {
          this.message += 'T';
          this.switchingBuilder = mutableBuilder(textBuilder); // buttonBuilder--->textBuilder
        }
      })
    }.position({x: 120, y: 60})
  }
}

MutableBuilder

class MutableBuilder<Args extends Object[]> extends WrappedBuilder<Args> { }

用于实现包装全局@Builder的动态切换的类,MutableBuilder继承自WrappedBuilder,其模板参数Args extends Object[]应传入@Builder函数的参数类型列表。mutableBuilder函数返回MutableBuilder对象。

原子化服务API: 从API version 22开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

BuilderCallback

type BuilderCallback = (...args: Args) => void

mutableBuilder函数入参为全局@Builder函数。

原子化服务API: 从API version 22开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
...argsArgs全局@Builder函数的入参。Args用于表示一个参数可以接收任意数量的参数。

示例:

@Builder
function MyBuilder(value: string, size: number) {
  Text(value)
    .fontSize(size)
}
let builderVar: MutableBuilder<[string, number]> = mutableBuilder(MyBuilder); // 声明builderVar的类型为MutableBuilder 

你可能感兴趣的鸿蒙文章

openharmony 鸿蒙 ts-drawing-components-shape

openharmony 鸿蒙 ts-universal-attributes-sharp-clipping

openharmony 鸿蒙 ts-universal-attributes-toolbar

openharmony 鸿蒙 ts-container-lazyvgridlayout

openharmony 鸿蒙 ohos-arkui-advanced-FoldSplitContainer

openharmony 鸿蒙 ts-methods-calendarpicker-dialog

openharmony 鸿蒙 ts-uicommonevent

openharmony 鸿蒙 ts-basic-gestures-tapgesture

openharmony 鸿蒙 ohos-arkui-advanced-DialogV2

openharmony 鸿蒙 ts-components-canvas-canvas

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/Hera7bXa