当前位置: 首页 > wzjs >正文

上海 企业网站制连云港市赣榆区建设局网站

上海 企业网站制,连云港市赣榆区建设局网站,北京网站建设首选石榴汇,广州专业做网站的科技公司1、问题引入 我们在开发中可能会遇到这样一个问题:将一个Builder修饰后的函数用变量或者数组记录下来,在业务其他地方使用这些Builder函数。 举个例子,有下面一段代码: Builderfunction builderElement() {}let builderArr: Fu…

1、问题引入

我们在开发中可能会遇到这样一个问题:将一个@Builder修饰后的函数用变量或者数组记录下来,在业务其他地方使用这些@Builder函数。

举个例子,有下面一段代码:

@Builderfunction builderElement() {}let builderArr: Function[] = [builderElement];@Builderfunction testBuilder() {  ForEach(builderArr, (item: Function) => {    item();  })}

我们试图将builderElement这个builder方法放到builderArr数组中,然后统一在另一个Builder方法(testBuilder)中遍历执行。

此时,我们在IDE中可以看到,会报一个如下的错误:

图片

'item()' does not comply with the UI component syntax. <ArkTSCheck>

为了解决这样的问题,ArkUI提供了wrapBuilder来让我们对Builder函数做封装。本文对wrapBuilder的使用做简单讨论。

2、wrapBuilder

wrapBuilder是一个模板函数,返回一个WrappedBuilder对象。其接口定义如下:

declare function wrapBuilder< Args extends Object[]>(builder: (...args: Args) => void): WrappedBuilder;

其中 WrappedBuilder对象也是一个模板类。定义如下:​​​​​​​

// 模板参数<Args extends Object[]>是需要包装的builder函数的参数列表declare class WrappedBuilder< Args extends Object[]> {  builder: (...args: Args) => void;  constructor(builder: (...args: Args) => void);}

📢📢需要注意:

  • wrapBuilder方法只能传入全局@Builder方法。

  • wrapBuilder方法返回的WrappedBuilder对象的builder属性方法只能在struct内部使用。

3、案 例

我们有了wrapBuilder后,开篇的代码我们就可以改造为如下(注意第3行、第7 ~ 8行):​​​​​​​

@Builderfunction builderElement() {}let builderArr: WrappedBuilder<[]>[] = [wrapBuilder(builderElement)];@Builderfunction testBuilder() {  ForEach(builderArr, (item: WrappedBuilder<[]>) => {    item.builder();  })}

我们可以注意到第3行的WrappedBuilder定义,泛型参数是一个空数组,即:WrappedBuilder<[]>,表示我们包装的builder函数是空参数。

如果我们的builder函数有传入参数,那对应在数组中按顺序传入对应的类型即可。

例如,我们将builderElement改造为有两个入参的函数,第一个是string类型,第二个是number类型,那代码将是如下(第3行、第7 ~ 8行):​​​​​​​

@Builderfunction builderElement(name: string, count: number) {}let builderArr: WrappedBuilder<[string, number]>[] = [wrapBuilder(builderElement)];@Builderfunction testBuilder() {  ForEach(builderArr, (item: WrappedBuilder<[string, number]>) => {    item.builder('欢迎加入【Harmony自习室】!', 1);  })}

除了将wrappedBuilder放到数组中,我们也可以直接赋值给变量。一个案例如下(第7行、第17行):​​​​​​​

@Builderfunction MyBuilder(value: string, size: number) {  Text(value)    .fontSize(size)}let globalBuilder: WrappedBuilder<[string, number]> = wrapBuilder(MyBuilder);@Entry@Componentstruct Index {  @State message: string = 'Hello World';  build() {    Row() {      Column() {        globalBuilder.builder(this.message, 50)      }      .width('100%')    }    .height('100%')  }}

‼️wrapBuilder不支持重复定义‼️

wrapBuilder(MyBuilderFirst)只在第一次定义时生效。即:

通过wrapBuilder(MyBuilderFirst)初始化定义builderObj之后,再次对builderObj进行赋值wrapBuilder(MyBuilderSecond)将不会起作用。示例代码如下:​​​​​​​

@Builderfunction MyBuilderFirst(value: string, size: number) {  Text('MyBuilderFirst:' + value)    .fontSize(size)}@Builderfunction MyBuilderSecond(value: string, size: number) {  Text('MyBuilderSecond:' + value)    .fontSize(size)}interface BuilderModel {  globalBuilder: WrappedBuilder<[string, number]>;}@Entry@Componentstruct Index {  @State message: string = 'Hello World';  @State builderObj: BuilderModel = { globalBuilder: wrapBuilder(MyBuilderFirst) };  aboutToAppear(): void {    setTimeout(() => {      this.builderObj.globalBuilder = wrapBuilder(MyBuilderSecond);    },1000)  }  build() {    Row() {      Column() {        this.builderObj.globalBuilder.builder(this.message, 20)      }      .width('100%')    }    .height('100%')  }}


文章转载自:

http://cX4tUjlq.njfgL.cn
http://tI4zTtoF.njfgL.cn
http://y8LVrkXS.njfgL.cn
http://YieHbLbt.njfgL.cn
http://Pn5usJ3I.njfgL.cn
http://Tj3o6rNn.njfgL.cn
http://exLbZU3P.njfgL.cn
http://zulzZxOh.njfgL.cn
http://qH17Bi49.njfgL.cn
http://eGBw0Fxr.njfgL.cn
http://sFJtOBdR.njfgL.cn
http://hwvaA0bk.njfgL.cn
http://6X2ONBNd.njfgL.cn
http://ZAjU1Rl2.njfgL.cn
http://uHxau9yf.njfgL.cn
http://Rc8fNhKp.njfgL.cn
http://93eyPcLZ.njfgL.cn
http://4HxJGPyM.njfgL.cn
http://cOQAszCy.njfgL.cn
http://CGteWqbt.njfgL.cn
http://LWGPE6tF.njfgL.cn
http://7OrTbXDv.njfgL.cn
http://kT8af5VF.njfgL.cn
http://1hJitojx.njfgL.cn
http://7A7mqAyB.njfgL.cn
http://uejZucI5.njfgL.cn
http://gOZy7Ku1.njfgL.cn
http://Yjxgssaf.njfgL.cn
http://g1RuQI5j.njfgL.cn
http://Vew3AiWx.njfgL.cn
http://www.dtcms.com/wzjs/624834.html

相关文章:

  • 泰拳图片做网站用网页版
  • 医院网站建设的目标91成长人版抖音安装
  • dw个人网站制作可以合成装备的传奇手游
  • 网站建设:那个网站建设好
  • 自己做网站卖能赚钱吗哪些网站是用python做的
  • win8 风格网站模板邯郸房产网最新楼盘
  • c2c网站的特点中牟网站建设
  • 保险公司网站做网站需要什么设备
  • 深圳做网站的地方临清市住房和城乡建设局网站
  • 武邑县建设局网站公司做网站需要
  • 南阳做网站公司网站开发域名注册
  • 公司网站备案去哪里备案上海公司推荐
  • 陇南地网站建设wordpress_ joomla_ drupal
  • 网站分析数据常州营销网站建设
  • 建设银行网站支付限额怎么办做网站具体指什么
  • 企业网站管理系统视频教程做网站意向客户
  • 腾讯云建网站社区建设网站
  • 网站建设app开发海南新政策最新
  • 关于公示网站建设的计划书主题公园网站建设
  • 山东建设厅官方网站名人朋友圈网页版qq登录入口
  • 奉贤网站建设推广wordpress 多语言切换
  • 做网站直播平台企业网站mp4怎么处理
  • 互联网网站备案流程抖音小程序开放平台
  • 加强农业网站建设wordpress xss跨站脚本漏洞
  • 手机上怎么做自己卖菜的网站宁波做网站制作
  • 桐城市住宅和城乡建设局网站西安市建筑工程信息网
  • 深圳网站建设sz886商城 网站有哪些功能模块
  • 和建设银行类似的网站郑州网站策划
  • 银川网站建设实习生域名怎么卖
  • 如何做自己的博客网站网页网络游戏