ArkTS - @Builder自定义构建函数

这个@Builder作用就是可以把组件样式抽离出来,写成公共组件,下边记录下全局自定义构建函数用法及注意的地方。

官方文档:开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。

一、用法

下边代码,我在CommonBtn.ets文件中定义了两个函数,函数里边定义了按钮样式,这两个函数必须要用@Builder装饰器装饰(官方规定)。
一个是按引用传递的参数(引用传递参数必须写两个$符号,$符号的值就是:{ 参数名:参数类型})
另一个是按值传递的参数,引用和值传递区别下边记录,最后把函数导出。

// CommonBtn.ets
// 引用传递
@Builder
export function Btn1($$: {btnName: string}){
  Row() {
    Button($$.btnName).width(200).padding({left: 20, right: 20})
  }.justifyContent(FlexAlign.Center).width("100%").margin({top: 8,bottom: 8})
}
// 按值传递
@Builder
export function Btn2(btnName: string){
  Row() {
    Button(btnName).width(200).padding({left: 20, right: 20})
  }.justifyContent(FlexAlign.Center).width("100%").margin({top: 8,bottom: 8})
}

接下来在需要的页面导入:

// BuilderTest.ets
import {Btn1, Btn2} from "./CommonBtn"
@Entry
@Component
struct Test {
  @State btnText1: string = "引用传递按钮文字"
  @State btnText2: string = "值传递按钮文字"
  build() {
    Column() {
      // 引用传递
      Row() {
        Btn1({btnName:this.btnText1})
      }
      // 值传递
      Row() {
        Btn2(this.btnText2)
      }
      // 测试按引用传递参数 和 值传递参数的区别
      Button("改变两个按钮的文字").onClick(e => {
        this.btnText1 += 1
        this.btnText2 += 1
      })
    }
  }
}

页面样式如下:

二、引用传递和值传递区别

按引用传递参数的时候,自定义构建函数中的变量会实时更新
官方文档:按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新。ArkUI提供$$作为按引用传递参数的范式。

按值传递的时候,自定义构建函数中的变量不会更新
官方文档:
调用@Builder装饰的函数默认按值传递。当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新。所以当使用状态变量的时候,推荐使用按引用传递。

测试:

当点击【改变两个按钮的文字】时,只有按引用传递的参数 实时更新了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/283413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类与对象

文章目录 1. 面向过程和面向对象的初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 this指针的引出8.2 this指…

springboot实现用户操作日志记录

springboot实现用户操作日志记录 简介:之前写了《aop实现日志持久化记录》一文,主要介绍自定义aop标注方法上,通过切面方法对用户操作插入mysql。思路正确但是实际操作上存在一些小问题,本文将从项目出发,对细节进行补…

1、安装与配置

1、安装与配置 Redis 是完全开源的,遵守 BSD 协议,一款NoSql数据库(非关系型数据库),高性能的key-value 数据库。 有以下三个特点: 1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中…

【AIGC-图片生成视频系列-4】DreamTuner:单张图像足以进行主题驱动生成

目录 一. 项目概述 问题: 解决: 二. 方法详解 a) 整体结构 b) 自主题注意力 三. 文本控制的动漫角色驱动图像生成的结果 四. 文本控制的自然图像驱动图像生成的结果 五. 姿势控制角色驱动图像生成的结果 2023年的最后一天,发个文记录…

使用keepalived时虚拟IP漂移注意事项

什么是Keepalived服务 keepalived是一个开源的软件项目,用于实现高可用性(HA)的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起,形成一个虚拟服务器集群,实现负载均衡和故障转移。 keepalived的核心功…

Conv2Former:一种transformer风格的卷积特征提取方式

一、前言 昨天读到了一篇有意思的文章,文章提出通过利用卷积调制操作来简化self-attention。还证明了这种简单的方法可以更好地利用卷积层中嵌套的大核(≥7 7)。我们都知道ViTs推动了设计识别模型的发展,近几年使用的也相当的多,通常就是CN…

C/C++面向对象(OOP)编程-回调函数详解(回调函数、C/C++异步回调、函数指针)

本文主要介绍回调函数的使用,包括函数指针、异步回调编程、主要通过详细的例子来指导在异步编程和事件编程中如何使用回调函数来实现。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:C/C精进之路 &…

ROS学习记录:使用RViz观测激光雷达传感器数据

一、使用CtrlAltT打开终端 二、输入 cd ~/catkin_ws1/ 进入工作空间 三、输入source ./devel/setup.bash 四、输入: roslaunch wpr_simulation wpb_simple.launch 打开机器人仿真环境 五、这是机器人仿真环境,里面机器人和书柜 六、再开一个终端&#…

开始使用MEVN技术栈开发01 概述

开始使用MEVN技术栈开发01 概述 简介 Welcome to Beginning MEVN Stack! This book focuses on the key tasks and concepts to get you started to learn and build MEVN stack applications in a faster pace. 欢迎阅读《MEVN堆栈入门》!本书重点介绍关键任务…

echarts 二分图布局_力向导图_关系图

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、力向导图(二分图布局…

【力扣题解】P98-验证二叉搜索树-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P98-验证二叉搜索树-Java题解🌏题目描述💡题解🌏总…

分割数组的最大差值 - 华为OD统一考试

分割数组的最大差值 - 华为OD统一考试 OD统一考试 分值: 100分 题解: Java / Python / C 题目描述 给定一个由若干整数组成的数组nums ,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组)&#xf…

【2024最新版】neo4j安装配置

neo4j安装 写在最前面下载配置环境(还是不行?)启动neo4jpython中调用 写在最前面 之前我安装过,还写了一篇笔记 结果意外发现没有了,而且和之前安装的步骤不一样了,因此再次记录安装过程 下载 https://ne…

OpenGL FXAA抗锯齿算法(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经提供了使用VCG读取Mesh的方式,接下来就需要针对读取的网格数据进行一些渲染操作了。在绘制Mesh数据时总会遇到图形的抗锯齿问题,OpenGL本身已经为我们提供了一种MSAA技术,但该技术对于一些实时渲染性能有…

【数据结构】栈和队列(栈的基本操作和基础知识)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 目录 前言 栈 栈的概念和结构 栈的实现 ​…

Rust使用gRPC

需要先安装protoc(Protocol Buffers Compiler),可据此Protobuf Compiler Installation下载 第一步:创建项目 创建两个新的Rust项目,分别作为服务端与客户端: cargo new rust_grpc_servercargo new rust_grp…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据,在主中心搭建了个集群,随着es在我们系统中的地位越来越重要,数据也越来越多,针对它的安全性问题也越发重要,那如何对es做异地容灾呢? 今天咱们就一起看下官方提供的…

Redis(上)

1、redis Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。它遵守BSD协议,使用ANSI C语言编写,并支持网络和持久化。Redis拥有极高的性能,每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数…

步进电机为什么叫步进电机,内部结构是什么,工作原理是什么,有什么特点,什么用途。

问题描述:步进电机为什么叫步进电机,内部结构是什么,工作原理是什么,有什么特点,什么用途。 问题解答: "步进"一词表示电机按照固定的步进角度运动。步进电机以控制脉冲信号来驱动转子按照一定的…

Vue2中使用echarts,并从后端获取数据同步

一、安装echarts npm install echarts -S 二、导入echarts 在script中导入&#xff0c;比如&#xff1a; import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…