【HarmonyOS 4.0】UI结构复用

2024-08-27 18:44
文章标签 ui 结构 复用 4.0 harmonyos

本文主要是介绍【HarmonyOS 4.0】UI结构复用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  1. 当页面有多个相同的UI结构时,开发者可以将重复使用的UI元素抽象成一个 @Builder 方法,该方法可在 build() 方法中调用多次,以完成UI结构的复用。
  2. @Builder 方法可以定义在组件内或全局。
  3. 组件内的 @Builder 方法可通过 this 访问当前组件的属性和方法,而全局的 @Builder 方法则不能。
  4. 组件内的 @Builder 方法只能用于当前组件,全局的 @Builder 方法导出(export)后,可用于整个应用。

1.1 组件内自定义构建函数

// 1. 定义语法
@Builder MyBuilderFunction() {}// 2. 使用语法
this.MyBuilderFunction() {}

全局自定义构建函数

// 1. 定义语法
@Builder export function MyGlobalBuilderFunction() {}// 2. 使用语法
MyGlobalBuilderFunction() {}

1.2 参数传递规则

  1. 按引用传递参数:当只有一个参数且参数为对象字面量时按引用传递,其余情况均为按值传递。
    1.1 按引用传递时,若传递的参数为状态变量,则状态变量的变化将会触发 @Builder 方法内部UI的刷新;按值传递则不会。
  2. 按值传递参数
    2.1 当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新。所以当使用状态变量的时候,推荐使用按引用传递。
// 按引用传递参数
class obj {username: string = ''
}
@Builder function MyBuilder($$: obj) { // 参数需要直接传入对象字面量才会按引用传递该参数,其余传递方式均为按值传递。Column() {Text(`hello ${$$.username}`).fontSize(18).fontColor(Color.Grey)}
}@Entry
@Component
struct UITest4 {@State person_name: string = '花花' // 当传递的参数为状态变量时,状态变量的改变才会引起@Builder方法内的UI刷新build() {Column() {MyBuilder({username: this.person_name})Button('点击修改').margin({top: 8}).onClick(() => {this.person_name = '七喜'})}}
}

1.3 @Builder 方法和自定义组件的区别

  1. @Builder 方法和自定义组件虽然都可以使用UI复用的效果,但是俩者还是有着本质的区别,其中最为显著的一个区别就是自定义组件可以定义自己的状态变量,而 @Builder 方法则不能。
  2. 若复用的UI结构没有状态,推荐使用 @Builder 方法,否则使用自定义组件。

这篇关于【HarmonyOS 4.0】UI结构复用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112474

相关文章

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者