鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法

news/2025/9/18 9:01:52/文章来源:https://www.cnblogs.com/heimatengyun/p/19098035
 **大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!**	

​ 除去系统预置的组件外,ArkTS 还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。

一、自定义组件语法

自定义组件的语法如下图所示

1自定义组件语法

各部分语法说明如下:

  • struct关键字

structArkTS新增的用于自定义组件或者自定义弹窗的关键字。其声明的数据结构和TS中的类十分相似,可包含属性和方法。

  • build方法

build()方法用于声明自定义组件的UI结构。

  • 组件属性

组件属性可用作自定义组件的参数,使得自定义组件更为通用。

  • @Compnent装饰器

@Component装饰器用于装饰struct关键字声明的数据结构。struct@Component装饰后才具备组件化的能力。

注: 装饰器是Typescript中的一种特殊语法,常用于装饰类、方法、属性,用于修改或扩展其原有的行为。

在学完自定义组件的语法之后,我们会发现前文案例中的每个页面实际上都是一个自定义组件。但是和自定义组件的语法相比,前边的每个案例还会多出一个@Entry装饰器,那@Entry的作用又是啥呢?

在鸿蒙应用中,每个页面都是由一些列组件组合而成的,并且这些组件都是逐层嵌套的,因此这些组件最终形成了一个组件树的结构,如下图所示
2组件树

​ 我们前边所编写的每个页面就相当于是组件树的根节点,而@Entry装饰器的作用就是标识该组件为组件树的根节点,也就是一个页面的入口组件。

二、自定义组件案例

​ 现在需要对前文的开/关灯的案例做出如下改造,由于两个按钮的结构十分相似,所以可考虑自定义一个按钮组件,然后进行复用。

​ 自定义组件可以放在文件内,也可以单独成一个文件

文件内:

@Entry
@Component
// 自定义组件
struct CustomCom {@State isOpen: boolean = falsebuild() {Column({space:50}) {if (this.isOpen) {Image('pages/imgs/light-on.png').height(300).width(300)}else {Image('pages/imgs/light-off.png').height(300).width(300)}Row({space:50}){CustomButton({text:'Open',color:Color.Red}) //自定义组件传参.onClick(()=>{this.isOpen=false})Button('Open').onClick(()=>{this.isOpen=true})}}.width('100%').width('100%').justifyContent(FlexAlign.Center)}
}@Component
struct CustomButton {text:String ='Close'  //接收参数color:Color =Color.Bluebuild() {Button(this.text.toString()).backgroundColor(this.color)}
}

单独文件:

新建ArkTS文件,将自定义组件内容拷贝

@Component
export  struct CustomButton {text:String ='Close'  //接收参数color:Color =Color.Bluebuild() {Button(this.text.toString()).backgroundColor(this.color)}
}

在要使用的文件中引入:

import { CustomButton } from './CumtomButton'

光标置于报错处,alt+回车,选择导入类即可

《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!

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

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

相关文章

剑指offer-31、整数中1出现的次数

题⽬描述 求出 1~13 的整数中1出现的次数,并算出 100~1300 的整数中 1 出现的次数?为此他特别数了⼀下 1~13 中包含 1 的数字有 1、10、11、12、13 因此共出现 6 次,但是对于后⾯问题他就没辙了。 ACMer 希望你们帮…

Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/

Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/背景:用户物理机,物理硬盘对应的根分区容量不足,且非LVM无法热扩容。 思路:加一块或者多块硬盘做lvm,暂时挂载到新路径/newroot;拷贝根分区全部内容到/newroot,…

动态黑名单的运作机制与实时防护策略

在数字化浪潮席卷全球的今天,移动应用已成为我们生活与工作的核心载体。然而,繁荣的背后,黑灰产的阴影如影随形。 群控设备批量注册、模拟器多开脚本薅羊毛、自动化程序模拟用户行为进行欺诈引流等等。这些攻击手段…

【译】让性能民主化:Copilot Profiler Agent 在实际代码中的应用

我们很高兴地宣布,Copilot Profiler Agent 已在 Visual Studio 2026 Insider 中推出,它是一款直接内置在 Visual Studio 中的人工智能性能助手。无需再盯着没完没了的调用树或一长串令人费解的数字,疑惑着“我该从哪…

微服务分布式事务解决方案梳理 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

objectarx项目props文件中判断条件的修改

为了实现多版本编译, 修改了配置名称, 在原有的debug和release后面增加了版本号后缀, 修改后需要修改props文件中的内容, 否则助兴表无法正常导入, 造成项目无法正常编译。 原有的类似如下:<ImportGroup Labe…

效率翻倍新技能:JDK8后的新特性

以下是 JDK 8 至 JDK 21 中最具实用性的新特性整理,涵盖语言特性、工具类增强、性能优化等方向,附代码示例和注释说明: 一、JDK 8(2014):函数式编程与现代化API JDK 8 是 Java 发展的里程碑版本,引入了大量颠覆…

实用指南:《URP管线中后处理效果的创新应用与优化实践》

实用指南:《URP管线中后处理效果的创新应用与优化实践》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

详细介绍:Vue3》》eslint Prettier husky

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

百日筑基

百日筑基 🌟2025年9月19日 继续打卡100天 第6天 今天是个好日子✨,我出门遇贵人,处处有惊喜,正财偏财一起来,感恩疯狂进账💰 💰 💰 1️⃣ 感恩宇宙万物的滋养 2️⃣ 感恩天地国家的护佑 3️⃣ 感恩祖宗父…

顶尖科技人才超50万城市:印度4个,中国3个,美国0个

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 “9月发布的‘世界百强创新集群排名’中,以深圳为核心的‘深圳-…

Java-Spring入门指南(十)纯Java类配备与@Configuration实战

Java-Spring入门指南(十)纯Java类配备与@Configuration实战2025-09-18 08:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

院士增选有效候选人公示材料都有什么内容?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490872025年科学院和工程院增选有效候选人材料公示好多天了,本来想好好…

可视化大屏素材展示系统 拖拽生成各种炫酷的大屏(源码下载)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

GPU微架构与多线程架构深入解析

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 摘要本文深入探讨GPU微架构的核心概念,重点分析多线程架构、存储…

完整教程:基于RSim的自动驾驶高保真仿真场景实现方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:C2(Command Control)命令与控制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

TechInsights 拆解:蔚来“亚当(Adam)”超级计算机

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选)蔚来亚当超级计算机是蔚来电…

拼接

叠甲:作者本人没有 npy,故事纯虚构。谢谢你的陪伴呢!你真的是一个出色的人!纵使天空不作美 就算阴雨连绵 还是一同展翅高飞把 云层上定是晴空万里 还是一同启航前往明天吧 明天定会比今天更好 我想自己会选择 永不…