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

HarmonyOS自学-Day2(@Builder装饰器)

目录

  • 文章声明⭐⭐⭐
  • 让我们开始今天的学习吧!
    • @Builder装饰器:自定义构建函数
      • @Builder介绍
      • @Builder使用说明
        • 自定义组件中创建自定义构建函数
        • 全局自定义构建函数
      • @Builder参数传递
        • 规则
        • 按引用传递参数
        • 按值传递参数


文章声明⭐⭐⭐

  1. 该文章为我(有编程语言基础,非编程小白)的 HarmonyOS自学笔记,此类文章笔记我会默认大家都学过前端相关的知识
  2. 知识来源为 HarmonyOS官方文档,归纳为自己的语言与理解记录于此
  3. 不出意外的话,我大抵会 持续更新
  4. 想要了解前端开发(技术栈大致有:Vue2/3、微信小程序、uniapp、HarmonyOS、NodeJS、Typescript)与Python的小伙伴,可以关注我!谢谢大家!

让我们开始今天的学习吧!

@Builder装饰器:自定义构建函数

@Builder介绍

常规的自定义组件只进行数据相关的传递,而被@Builder装饰器所修饰的方法,是一个将UI元素抽象化的方法,可以在自定义组件的 build() 函数中使用,从而可以做到使用方法来创建UI元素的操作


@Builder使用说明

自定义组件中创建自定义构建函数

语法如下:

@Builder MyBuilderFunction1() {...} // 此处的MyBuilderFunction1为方法名

使用方法如下:

this.MyBuilderFunction1()

需要注意的地方:

  • 自定义组件中可以定义多个自定义构建函数(即被 @Builder 修饰的方法),在自定义组件中,自定义构建函数被认为是该组件的私有、特殊类型的成员函数
  • 自定义构建函数可以在自定义组件中的 Builder() 函数中调用,但在自定义组件外不可使用,因为上一条注意点说了是私有的
  • 在自定义构建函数的函数体中,this指代当前所属的自定义组件,自定义组件中的状态变量可以在自定义构建函数内访问,建议通过this访问自定义组件的状态变量而不是参数传递
全局自定义构建函数

语法如下:

@Builder function MyBuilderFunction2() {...} // 此处的MyBuilderFunction2为方法名

使用方法如下:

MyBuilderFunction2()

需要注意的地方:

  • 全局的自定义构建函数可以被整个应用获取,不允许使用this和bind方法
  • 如果不涉及组件状态变化,建议使用全局的自定义构建方法

@Builder参数传递

规则
  • 不允许传递undefined、null为参数
  • 在自定义构建函数的函数体内,不允许改变参数的值
  • 在自定义构建函数的函数体内,UI语法必须遵循UI语法规则
按引用传递参数

按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新

格式如下:

// 创建时
@Builder MyBuilder1( $$ : { param1: string, param2 : string } ) {Text($$.param1);Text($$.param2);
};
// 调用时
MyBuilder({param1:...,param2:...})

实例演示:

@Builder function MyBuilder($$: { str: string }) {Text($$.str)
}@Entry
@Component
struct MyComponent {@State name: string = 'Richie';build() {Column() {MyBuilder({ str: this.name });Divider();Button("更改姓名").onClick(() => {this.name = 'Taylor'}).margin({ top: 100 })}}
}

点击按钮后UI刷新了:
效果图

按值传递参数

调用@Builder装饰的函数默认按值传递,当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新,所以当使用状态变量的时候,推荐使用按引用传递

格式如下:

// 创建时
@Builder MyBuilder1(param1: string, param2 : string) {Text(param1);Text(param2);
};
// 调用时
MyBuilder('Richie','Taylor')

实例演示:

@Builder function MyBuilder(param1:string) {Text(param1);
}@Entry
@Component
struct MyComponent {@State name: string = 'Richie';build() {Column() {MyBuilder(this.name);Divider();Button("更改姓名").onClick(() => {this.name = 'Taylor'}).margin({ top: 100 })}}
}

点击按钮后UI没有刷新:
效果图

http://www.lryc.cn/news/262983.html

相关文章:

  • bottom-up-attention-vqa-master 成功复现!!!
  • BigDecimal中divide方法详解
  • 视频推拉流EasyDSS互联网直播/点播平台构建户外无人机航拍直播解决方案
  • 行为型设计模式-策略模式(Strategy Pattern)
  • html中RGB和RGBA颜色表示法
  • 【BEV感知】BEVFormer 融合多视角相机空间特征和时序特征的端到端框架 ECCV 2022
  • git拉取hugging face代码失败:443
  • 【赠书活动】OpenCV4工业缺陷检测的六种方法
  • 设计模式之创建型设计模式(一):单例模式 原型模式
  • Amazon CodeWhisperer 在 vscode 的应用
  • 【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)
  • uniapp微信小程序下载保存图片流到本地,base64
  • 华为数通——企业双出口冗余
  • 送奶APP开发:终极指南
  • Ngnix之反向代理、负载均衡、动静分离
  • (C++)将x减到0的最小操作数--滑动窗口
  • 回答某位同学的问题:残差网络常用来分类,可以用于回归预测吗?
  • C语言初学5:运算符
  • 亿某通电子文档安全管理系统任意文件上传漏洞 CNVD-2023-59471
  • 产品入门第四讲:Axure动态面板
  • 【数据结构】哈希表算法总结
  • 微信小程序单图上传和多图上传
  • github入门基础操作
  • Android Studio(3.6.2版本)安装 java2smali 插件,java2smali 插件的使用方法简述
  • vscode使用remote ssh到server上 - Node进程吃满CPU
  • 如何在Go中使用日期和时间
  • 2023_Spark_实验二十九:Flume配置KafkaSink
  • Koa.js 入门手册:洋葱模型插件机制详解以及常用中间件
  • 零信任 SASE 办公安全解决方案:提升企业网络安全与灵活性
  • 【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models