登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法 ...
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
[ 复制链接 ]
计海龄
2025-10-1 17:52:58
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
**大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!**
复制代码
除去系统预置的组件外,ArkTS 还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。
一、自定义组件语法
自定义组件的语法如下图所示
各部分语法说明如下:
struct关键字
struct是
ArkTS
新增的用于自定义组件或者自定义弹窗的关键字。其声明的数据结构和
TS
中的类十分相似,可包含属性和方法。
build方法
build()方法用于声明自定义组件的UI结构。
组件属性
组件属性可用作自定义组件的参数,使得自定义组件更为通用。
@Compnent装饰器
@Component装饰器用于装饰struct关键字声明的数据结构。struct被@Component装饰后才具备组件化的能力。
注: 装饰器是Typescript中的一种特殊语法,常用于装饰类、方法、属性,用于修改或扩展其原有的行为。
在学完自定义组件的语法之后,我们会发现前文案例中的每个页面实际上都是一个自定义组件。但是和自定义组件的语法相比,前边的每个案例还会多出一个@Entry装饰器,那@Entry的作用又是啥呢?
在鸿蒙应用中,每个页面都是由一些列组件组合而成的,并且这些组件都是逐层嵌套的,因此这些组件最终形成了一个组件树的结构,如下图所示
我们前边所编写的每个页面就相当于是组件树的根节点,而@Entry装饰器的作用就是标识该组件为组件树的根节点,也就是一个页面的入口组件。
二、自定义组件案例
现在需要对前文的开/关灯的案例做出如下改造,由于两个按钮的结构十分相似,所以可考虑自定义一个按钮组件,然后进行复用。
自定义组件可以放在文件内,也可以单独成一个文件
文件内:
@Entry
@Component
// 自定义组件
struct CustomCom {
@State isOpen: boolean = false
build() {
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.Blue
build() {
Button(this.text.toString())
.backgroundColor(this.color)
}
}
复制代码
单独文件:
新建ArkTS文件,将自定义组件内容拷贝
@Component
export struct CustomButton {
text:String ='Close' //接收参数
color:Color =Color.Blue
build() {
Button(this.text.toString())
.backgroundColor(this.color)
}
}
复制代码
在要使用的文件中引入:
import { CustomButton } from './CumtomButton'
复制代码
光标置于报错处,alt+回车,选择导入类即可
《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
鸿蒙
应用开发
入门
实战
ArkTS
相关帖子
JVM内存、GC与JConsole实战全解析
Flask路由入门指南:从基础定义到优先级与动态路由转换器
Python Selenium 漫步指南:从入门到精通
JUnit 5 中的 @ClassTemplate 实战指南
PHP 值对象实战指南:避免原始类型偏执
消息队列从入门到跑路,保姆级教程!傻子可懂
GEO优化实战指南2025:六大服务商核心能力全景对比与选型策略
MAF快速入门(7)工作流的状态共享
Python环境管理利器Conda:从入门到避坑实战指南
Spring AI Alibaba 入门指南
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
JVM内存、GC与JConsole实战全解析
0
703
洫伍俟
2025-12-13
业界
Flask路由入门指南:从基础定义到优先级与动态路由转换器
1
319
扒钒
2025-12-15
业界
Python Selenium 漫步指南:从入门到精通
0
730
固拆棚
2025-12-16
业界
JUnit 5 中的 @ClassTemplate 实战指南
0
714
唯棉坜
2025-12-16
业界
PHP 值对象实战指南:避免原始类型偏执
0
400
宁觅波
2025-12-17
业界
消息队列从入门到跑路,保姆级教程!傻子可懂
0
4
遏筒煽
2025-12-17
安全
GEO优化实战指南2025:六大服务商核心能力全景对比与选型策略
0
557
裴涛
2025-12-17
业界
MAF快速入门(7)工作流的状态共享
0
75
兼罔
2025-12-18
业界
Python环境管理利器Conda:从入门到避坑实战指南
0
559
迭婵椟
2025-12-18
科技
Spring AI Alibaba 入门指南
0
726
靳谷雪
2025-12-18
回复
(3)
丘娅楠
2025-11-20 04:00:58
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
裸历
2025-12-9 11:30:56
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
系味
5 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
计海龄
5 天前
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
440
JS逆向-混淆加密-识别&还原-Eval&JSFuck&JS
928
2025年上海防水补漏谁家强?长三角标杆企业
605
正式接入DeepSeek-V3.2,国产AI“双剑合壁
392
守嘉陪诊师培训报名热潮引关注 独家实习机
899
顺序表实现线性结构
66
吴恩达深度学习课程四:计算机视觉 第二周
251
设计模式简述
188
vue 甘特图 vxe-gantt table 连接线的用法
604
[SDR] USRP 双通道与 MIMO 技术:手搓 1 发
573
【面试题】MySQL 的存储引擎有哪些?它们之
560
为什么协程能让程序不再卡顿?——从同步、
712
【面试题】MySQL 索引的最左前缀匹配原则是
238
AgentScope深入学习-总体认识
342
再推荐 10 个低调但非常实用的 PHP 包
321
DDD领域驱动设计
469
从繁琐到高效:招聘自动化系统优化招聘流程
712
接着唠:三级缓存为啥是“刚需”?没有它Sp
904
17.行为型 - 观察者模式 (Observer Pattern
489
最小二乘问题详解9:使用Ceres求解非线性最
177
FFmpeg 关键的结构体