登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法 ...
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
[ 复制链接 ]
计海龄
2025-10-1 17:52:58
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
**大家好,我是潘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
相关帖子
【大数据高并发核心场景实战】缓存层 - 日亿万级请求日志收集
构建工具Gradle入门实践
Markdown是什么?Markdown语法大全-Markdown从入门到精通
定制化 Live555 实战:按需开发低耗 RTSP 服务器,完美适配 C# 项目
Flask 应用部署实战:Nginx 反向代理配置指南
JVM内存、GC与JConsole实战全解析:从理论到可视化的完整指南
DMP学习路线之入门
扣子Coze实战:智能体(Agent)1分钟自动仿写公众号爆文,一键自动发布
JVM内存、GC与JConsole实战全解析
Flask路由入门指南:从基础定义到优先级与动态路由转换器
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
【大数据高并发核心场景实战】缓存层 - 日亿万级请求日志收集
2
369
汝雨竹
2025-12-04
安全
构建工具Gradle入门实践
1
291
昆拗干
2025-12-05
安全
Markdown是什么?Markdown语法大全-Markdown从入门到精通
1
327
靛尊
2025-12-05
安全
定制化 Live555 实战:按需开发低耗 RTSP 服务器,完美适配 C# 项目
0
241
敕码
2025-12-07
业界
Flask 应用部署实战:Nginx 反向代理配置指南
1
930
盒礁泅
2025-12-11
业界
JVM内存、GC与JConsole实战全解析:从理论到可视化的完整指南
0
825
于映雪
2025-12-12
安全
DMP学习路线之入门
0
610
济曝喊
2025-12-12
业界
扣子Coze实战:智能体(Agent)1分钟自动仿写公众号爆文,一键自动发布
0
17
高小雨
2025-12-13
业界
JVM内存、GC与JConsole实战全解析
0
696
洫伍俟
2025-12-13
业界
Flask路由入门指南:从基础定义到优先级与动态路由转换器
0
310
扒钒
2025-12-15
回复
(3)
丘娅楠
2025-11-20 04:00:58
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
裸历
7 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
系味
前天 10:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
计海龄
前天 10:42
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
246
RSA加密
316
pydash原型链污染
176
大模型榜单周报(2025/12/08—2025/12/12)
849
当你不再迷信“最强模型”,系统设计才刚刚
876
软件i2c
301
2025年专业起名老师联系方式汇总:全国资深
652
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
838
JSAPIThree 加载 3D Tiles 学习笔记:大规
358
LLM 工具调用的范式演进与认知模型集成
355
Requirements Engineering with AI for Con
343
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
947
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
241
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型