鸿蒙ArkTS语言学习(五):扩展(函数)@Extend@Styles@Builder

news2024/12/23 8:58:28

如何实现结构、样式复用呢?

@Extend:扩展组件(样式、事件)

在这里插入图片描述

作用:将相同组件复用的属性结构抽取封装,将不同的结构通过传入参数进行修改。

1. 定义语法
@Extend(组件名) function 函数名{ ... }
2. 调用
组件名.函数名(参数...3. 例子:
@Extend(Text) function fancy (fontSize: number) {
  .fontColor(Color.Red)
  .fontSize(fontSize)
  .onclick(()=>{})
}
Text('Fancy')
 .fancy(16)
Text('Fancy')
  .fancy(24)
  1. @Extend仅支持在全局定义,不支持在组件内部定义。只能在当前文件内使用,不支持export。
  2. @Extend支持封装指定组件的私有属性、私有事件和自身定义的全局方法。
  3. @Extend装饰的方法支持参数,开发者可以在调用时传递参数,调用遵循TS方法传值调用。
  4. @Extend装饰的方法的参数可以为function,作为Event事件的句柄。???
  5. @Extend的参数可以为状态变量,当状态变量改变时,UI可以正常的被刷新渲染。

@Styles:抽取通用属性、事件

不同的组件具有通用的属性或事件,将通用的属性或事件抽取出来进行封装。

// 全局
@Styles function functionName() { ... }

// 在组件内;尤其是利用this时一定要定义在组件内
@Component
struct FancyUse {
  @Styles fancy() {
    .height(100)
  }
}
  1. 当前@Styles仅支持通用属性和通用事件。
  2. @Styles方法不支持参数
  3. @Styles可以定义在组件内或全局,在全局定义时需在方法名前面添加function关键字,组件内定义时则不需要添加function关键字。只能在当前文件内使用,不支持export。
  4. 定义在组件内的@Styles可以通过this访问组件的常量和状态变量,并可以在@Styles里通过事件来改变状态变量的值
  5. 组件内@Styles的优先级高于全局@Styles。框架优先找当前组件内的@Styles,如果找不到,则会全局查找。

@Builder:自定义构建函数(结构、样式、事件)

除了组件、样式、事件外,还可以封装结构。结构的复用。用于封装相似的结构。
在这里插入图片描述
在这里插入图片描述
可以全局也可以局部。

//全局自定义构建函数
定义的语法:
@Builder function MyGlobalBuilderFunction() { ... }
使用方法:
MyGlobalBuilderFunction()
如果不涉及组件状态变化,建议使用全局的自定义构建方法。

//局部
定义的语法:
@Builder MyBuilderFunction() {}
使用方法:
this.MyBuilderFunction()
  1. @Builder通过按引用传递的方式传入参数,才会触发动态渲染UI,并且参数只能是一个。

  2. @Builder如果传入的参数是两个或两个以上,不会触发动态渲染UI。

  3. @Builder传入的参数中同时包含按值传递和按引用传递两种方式,不会触发动态渲染UI。

  4. @Builder的参数必须按照对象字面量的形式,把所需要的属性一一传入,才会触发动态渲染UI。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起学习LeetCode热题100道(60/100)

60.单词搜索(学习) 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那…

selenium消除启动特征避免被反爬-使用已经打开的浏览器

selenium消除启动特征避免被反爬 启动特征很多,如何消除selenium启动特征呢?这个也是因站而异,如果规避常规的检测,做到以下2点就可以。 1 是消除window.navigator.webdriver的值; 2 是修改chromedriver.exe的源码…

鸿蒙开发 数组改变,ui渲染没有刷新

问题描述: 数组push, 数组长度改变,ui也没有刷新 打印出了数组 console.log(this.toDoData.map(item > ${item.name}).join(, ), this.toDoData.length) 原代码: Text().fontSize(36).margin({ right: 40 }).onClick(() > {TextPicker…

在SpringBoot项目中使用多线程(配合线程池)加快从MySQL导入数据到ElasticSearch的速度

文章目录 1. 准备工作1.1 索引库1.2 建表1.3 实体类1.3.1 item.java1.3.2 itemDocument.java 1.4 编写配置文件1.5 编写 Mapper 类和 Service 类 2. 没有使用多线程的情况2.1 编码2.2 测试结果 3. 使用多线程(配合线程池)的情况3.1 自定义类,…

EM-7肽;EM-7-NH2;CAS:289632-61-7

【EM-7 简介】 EM-7,也被称为EM-7-NH2,其化学名称为[D-Glu5,D-Trp7,9,10]-Substance P (5-11),分子式为C57H66N12O10S,分子量为1111.273。 【中文名称】(D-谷氨酰 5,D-色氨酰 7,9,10)-物质 P (5-11) 【英文名称】(D-Glu5,D-Trp7…

openlayers+vite+vue3实现规划某一特定行政区(二)

在前一期实现离线地图初始化的基础上,本文中主要阐述如何实现规划某一特定行政区,并展示其行政区的区县名称。 提示:因前文中阐述了如何实现离线地图的初始化,所以在此不再进行书写并详解初始化的过程和流程,如有不明…

Task-Embedded Control Networks for Few-Shot Imitation Learning

发表时间:CoRL 2018 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4500197057754718210&noteId2424798567891365120 作者单位:Imperial College London Motivation:就像人类一样,机器人应该能够利用来…

力扣经典题目之->另一颗树的子树(subRoot是否是root的子树)

一:题目 本题需要用到力扣经典题目之->相同的树(递归判断两颗二叉树是否相同)-CSDN博客 中的isSameTree,直接cv即可。 二:代码 三:解释 第一个函数: 力扣经典题目之->相…

模型 分形理论

系列文章 分享 模型,了解更多👉 模型_思维模型目录。自相似,无限细节。 1 分形理论的应用 1.1 字节跳动的分形创新增长引擎 字节跳动作为一家全球领先的科技公司,其快速的发展和创新能力在业界引起了广泛关注。公司通过分形创新…

大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

使用myAGV、Jetson Nano主板和3D摄像头,实现了RTAB-Map的三维建图功能!

引言 在现代机器人技术中,高精度的环境感知与建图是实现自主导航的关键。本文将展示如何使用myAGV Jetson Nano移动平台搭载Jetson Nano BO1主板,结合RTAB-Map和3D相机,实现更加立体和细致的环境建图。myAGV Jetson Nano具备SLAM雷达导航功能…

es的简易dsl语句

数据模式为文档,_doc格式数据,也就是json 数据 es根据_id查询数据 GET /index_name/_doc/document_id es根据_id删除数据 DELETE /index_name/_doc/document_id es查询mapping结构 GET /index_name/_mappings es查询index下所有数据(突破100…

9、LLaMA-Factory项目微调介绍

1、LLaMA Factory 介绍 LLaMA Factory是一个在GitHub上开源的项目,该项目给自身的定位是:提供一个易于使用的大语言模型(LLM)微调框架,支持LLaMA、Baichuan、Qwen、ChatGLM等架构的大模型。更细致的看,该项…

UG NX二次开发(C++)-获取曲面的相切曲面

文章目录 1、前言2、创建一个三维模型3、获取相切曲面的方法3、测试结果1、前言 最近一段时间,QQ群中的群友总问我一个问题,那就是如何获取曲面的相切曲面,我今天就把这个方法写出来,以帮助读者。 在UG二次开发中,查询了帮助文档,没有找到获取相切曲面的函数。所以采用N…

「C++系列」继承

文章目录 一、继承1. 基本概念2. 继承类型①公有继承(Public Inheritance)②私有继承(Private Inheritance)③保护继承(Protected Inheritance) 3. 继承的语法4. 构造函数和析构函数①构造函数案例②析构函…

单链表的问题(2)

1.对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 这个我们可以运用双指针来解决这个…

爆改YOLOv8|利用全新的聚焦式线性注意力模块Focused Linear Attention 改进yolov8(v1)

1,本文介绍 全新的聚焦线性注意力模块(Focused Linear Attention)是一种旨在提高计算效率和准确性的注意力机制。传统的自注意力机制在处理长序列数据时通常计算复杂度较高,限制了其在大规模数据上的应用。聚焦线性注意力模块则通…

EmguCV学习笔记 C# 7.1 角点检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Excel中让第一行始终显示

要在Excel中让第一行始终显示,你可以使用冻结窗格功能。具体步骤如下: 打开需要设置第一行一直显示的工作表。将光标定位在工作表内任意一个单元格内。选择“视图”菜单,单击工具栏中的“冻结窗格”命令。在弹出的下拉菜单中选择“冻结首行”…

字母的大小写转换(tolower、toupper、transform)

字母的大小写转换(tolower、toupper、transform) 1. tolower()、toupper()函数 (这个在之前的一篇文章 “字符串中需要掌握的函数总结(1)”中有较为详细的介绍。&#…