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

ArkTS自定义组件

一、自定义组件基本结构

// 定义自定义组件 ButtonCom.ets
@Component
export struct BtnCom{@State msg: string = "按钮";build() {Row(){Text(this.msg).onClick(() => {this.msg = "测试"})}}
}
// 引入自定义组件
import {BtnCom} from "./ButtonCom"
@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {// 使用BtnCom()Divider()Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Divider()BtnCom()}.width('100%')}.height('100%')}
}

struct

自定义组件基于struct 实现,struct +自定义组件名+{...} 的组合构成自定义组件,不能有继承关系。对于struc的实例化,可以省略new。
注:自定义组件名、类名、函数名不能和系统组件名相同。

@Component

装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。

build函数

build( )函数用于定义自定义组件的声明式UI描述,也就是自定义组件必须定义build()函数。

@Entry

该装饰器的自定义组件将作为UI页面的入口,在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。

二、自定义组件成员变量定义及初始化

// 定义 BtnComponent ,成员变量为:name、age
@Component
struct BtnComponent{private name: string = "lxc";private age: number;build() {Text(`${this.name}_${this.age}`)}
}

1、初始化自定义组件中的成员变量

@Entry
@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build() {Row() {Column() {// 使用自定义组件,及初始化 name和ageBtnComponent({name: this.message, age: this.age})}.width('100%')}.height('100%')}
}

效果如下:

build( ) 函数

所有声明在build() 函数的语句,统称为:UI描述,UI描述需要遵循以下规则:
(1)@Entry 装饰的自定义组件,其build() 函数下的根节点,唯一且必要(也就是说build()函数下必须且只有一个根节点),且必须为根组件。

@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build(){// Row 为根节点,且 是容器组件Row() {Column() {BtnComponent({name: this.message, age: this.age})Divider()Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}

(2)@Component装饰的自定义组件,其build() 函数下的根节点唯一且必要,根节点可以为非容器组件。

@Component
struct BtnComponent{private name: string;private age: number;build() {// Text 为根节点组件,且不是容器组件Text(`${this.name}_${this.age}`)}
}

三、自定义组件的通用样式

自定义组件可以通过链式调用的形式设置通用样式。
注意事项:
ArkUI给自定义组件设置样式时,相当于给 BtnComponent 套了个不可见的容器组件,而这些样式是设置在容器组件上的,而非直接设置给BtnComponent 组件的 Text 组件上。背景颜色灰色并没有直接生效在Text上,而是生效在Text 所处的开发者不可见的容器组件上。

@Component
struct BtnComponent{private name: string;private age: number;build() {Text(`${this.name}_${this.age}`)}
}
@Entry
@Component
struct Index {@State message: string = 'Hello World'@State age: number = 20build(){Row() {Column() {// 为组件设置样式BtnComponent({name: 'lxc', age: 20}).width(200).height(200).backgroundColor(Color.Gray)}.width('100%')}.height('100%')}
}


 

相关文章:

  • 【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(三)
  • GCP FrontendConfig 详解:优化您的云负载均衡
  • 自然语言处理-BERT处理框架-transformer
  • centos 7系统升级内核(ELRepo仓库)、小版本升级、自编译内核
  • Element-plus点击当前行之后获取数据显示跟随行数据
  • Java将list数组中重复的对象进行去重
  • java反射和注解
  • 基于Spring Boot与Vue的智能房产匹配平台+文档
  • Log4j日志框架讲解(全面,详细)
  • 上帝之眼(BEVSee):多相机间无需标定,将各自目标统一到同一坐标系下(代码开源,提供数据集)
  • C++编程(五)单例模式 友元
  • 如何寻找一个领域的顶级会议,并且判断这个会议的影响力?
  • SpringBoot学习04-[定制SpringMVC]
  • 在Qt中,直接include <moc_xxxxx.cpp> 为什么不会出现符号冲突的错误?
  • UTONMOS:探索未来区块链与元宇宙的游戏奇妙融合
  • 03Go 类型总结
  • Git学习与使用心得(1)—— 初始化
  • HomeBrew常规使用教程
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • node和express搭建代理服务器(源码)
  • React as a UI Runtime(五、列表)
  • React-flux杂记
  • React-生命周期杂记
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spark学习笔记之相关记录
  • 基于组件的设计工作流与界面抽象
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何在招聘中考核.NET架构师
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #Spring-boot高级
  • (9)目标检测_SSD的原理
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十) 初识 Docker file
  • (图)IntelliTrace Tools 跟踪云端程序
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)创业家杂志:UCWEB天使第一步
  • (转)可以带来幸福的一本书
  • **PHP分步表单提交思路(分页表单提交)
  • .bat批处理(一):@echo off
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net6+aspose.words导出word并转pdf
  • .NET单元测试
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @开发者,一文搞懂什么是 C# 计时器!
  • [145] 二叉树的后序遍历 js