大家好,我是 K 老师(华为 HarmonyOS 官方认证讲师)!深耕鸿蒙开发多年,做过数十个鸿蒙原生项目,今天专门给家人们拆解纯血鸿蒙星河版的组件封装核心逻辑 —— 不管是新手入门想复用代码,还是老鸟想优化项目维护性,看完这篇直接套用,不用再踩参数设计、逻辑抽象的坑~
一、先搞懂:组件封装到底为了啥?
组件的本质就是 “接收参数、返回 UI 的函数容器”,封装核心就解决两个问题:
- 复用:避免重复写相同 UI 和逻辑(比如项目里多次用到的按钮、列表项);
- 维护性:把复杂功能拆成独立组件,后续改 bug、加功能只动一个地方,不影响全局。
核心难点就一个:抽象 “合适的参数”,返回 “能用的 UI”—— 不用过度设计,也别漏了关键可配置项。
二、两种核心封装方法:新手老手都适配
组件封装没有玄学,就两种通用思路,掌握后所有场景都能套,咱们结合鸿蒙实战场景讲明白:
1. 自顶向下:先设计 API,再写逻辑(老手首选)
适合有明确需求、知道组件要适配多种场景的情况(比如封装一个全局通用的按钮组件)。
- 步骤 1:先敲定组件 API 参数先想清楚:组件要接收哪些参数?是静态数据(props)、用户操作反馈(回调函数),还是自定义 UI 结构(builder 插槽)?举个例子:要封装鸿蒙的
CustomButton组件,先设计 API: - 步骤 2:根据 API 反推逻辑实现有了 API 就有了明确目标 —— 比如根据
isDisabled控制按钮点击态,根据bgColor设置样式,根据builder渲染图标,不用写冗余代码,精准匹配需求。
2. 自底向上:先实现功能,再抽参数(新手友好)
如果一开始没思路,先 “写死功能” 再优化,零压力上手:
- 步骤 1:先写死核心功能比如要做一个鸿蒙的
GoodsItem列表项,先直接把商品名称、图片、价格写死在组件里,先让 UI 和逻辑跑通(比如点击跳转商品详情)。 - 步骤 2:提炼 “可变部分” 为参数功能跑通后,思考:哪些地方别人用的时候可能要改?
- 总结:自底向上的核心就是 “把可变的东西抽象成参数”,不用一开始想太多,边写边优化。
三、组件参数分类:该用啥就用啥(鸿蒙实战版)
参数不用瞎设计,按场景对号入座,鸿蒙里常用的就三类:
| 参数类型 | 适用场景 | 鸿蒙实战例子 |
|---|---|---|
| props | 传递静态数据(string/number/object/array) | 给列表项传goods: GoodsModel(商品数据)、控制组件显示隐藏的show: boolean |
| 回调函数 | 子组件通知父组件、传递内部数据 | 按钮点击onClick: () => void、输入框内容变化onInputChange: (value: string) => void |
| builder | 传递自定义 UI 结构(组件标签组成的内容) | 给卡片组件传header: () => void(自定义头部 UI)、给列表项传action: () => void(自定义操作按钮组) |
四、拓展:鸿蒙中 3 种常见组件封装类型
日常开发里,组件封装就分这三类,覆盖 90% 场景:
1. 无状态组件(UI 组件 / 木偶组件)
- 核心特点:只负责显示,“给啥数据就渲染啥”,没有内部状态(不用
@State); - 鸿蒙实战:商品列表项
GoodsItem、标签组件Tag,只接收 props 和回调,自身不处理复杂逻辑; - 优势:轻量、复用性极强,维护成本低。
2. 无渲染组件(逻辑复用组件)
- 核心特点:自身不渲染 UI,只封装可复用逻辑,UI 交给业务方实现;
- 鸿蒙实战:封装
OrientationDetector(横竖屏检测组件),内部通过@ohos.sensor监听设备方向,把 “横竖屏状态” 通过回调传给业务方,具体显示 “横屏提示文案” 还是 “切换布局”,由业务方用builder实现; - 优势:逻辑复用性拉满,比如横竖屏检测逻辑,多个页面都能共用。
3. 常规组件(状态 + 逻辑 + UI 一体化)
- 核心特点:既有内部状态(比如
@State isLoading: boolean),又有逻辑和 UI,是业务中最常见的类型; - 鸿蒙实战:带加载状态的
SubmitButton,内部管理 “加载中 / 正常 / 禁用” 状态,接收text(按钮文字)、onSubmit(提交回调),点击后自动切换加载状态,业务方直接用,不用关心状态管理; - 优势:开箱即用,把复杂逻辑封装在内部,简化业务代码。
五、新手实战建议(K 老师踩坑总结)
- 新手先从 “自底向上” 入手,先实现功能再抽参数,不用怕一开始写死,优化比空想更高效;
- 参数别过度设计:比如一个按钮组件,不用搞十几个 props,保留 “核心可配置项” 即可(比如文字、颜色、点击事件),后续不够再加;
- 优先用鸿蒙的
builder替代冗余 props:比如要支持自定义 UI,用builder比加多个showIcon、iconPosition等 props 更灵活; - 无状态组件尽量纯展示:别在里面写复杂逻辑,保持 “输入输出一致”,复用性更强。
结尾互动
以上就是纯血鸿蒙星河版组件封装的完整思路,不管是简单 UI 复用,还是复杂逻辑封装,按这个方法来都能搞定~ 我是 K 老师,专注鸿蒙开发实战教学,后续会在 HarmonyKE 课堂 App 中同步组件封装的完整代码(可直接复制使用)。
如果你们在封装鸿蒙组件时遇到具体问题(比如builder传参报错、状态管理冲突),可以在评论区留言,下期专门拆解解决方案~ 关注我,持续更新鸿蒙干货,收藏本文,下次封装组件直接翻出来套!
暂无评论数据
发布
相关推荐
云上修代码
2171
0
快乐编译者
1168
0
2030
0
老李的控制台
1202
0
1361
0K老师
大家好我是K老师,这是我的个人介绍:鸿蒙先锋,鸿蒙开发者达人,鸿蒙应用架构师,HDG组织者,可0-1开发纯血鸿蒙应用,可0-1开发前端加鸿蒙混合应用,可0-1开发PC端鸿蒙应用。
帖子
提问
粉丝
[HarmonyOS][K老师]鸿蒙中主线程与子线程通信机制详解,Emitter,Worker,EventHandler和EventRunner。
2026-01-28 11:31:47 发布[HarmonyOS][K老师]鸿蒙大文件上传方案。
2026-01-28 10:30:53 发布