HarmonyOS ArkUI 组件复用与父子组件通信
在鸿蒙ArkUI声明式开发体系中组件复用与父子组件通信是从“基础页面编写”进阶到“工程化项目开发”的核心分水岭。规范化开发通过复用机制精简代码、统一UI风格并通过组件通信实现页面数据驱动更新。一、前言为什么需要组件复用在开发电商首页、购物车、列表卡片等复杂页面时页面中存在大量重复的样式、重复的UI结构、统一的交互逻辑。如果全部手写会出现代码冗余、样式不统一、后期维护成本极高的问题。ArkUI 提供了一套完整的复用方案样式复用、UI结构复用、自定义组件复用配合父子组件数据通信机制能够实现高内聚、低耦合的前端开发模式也是企业级鸿蒙项目模块化开发的基础。二、三大复用装饰器对比与实战用法(1)Styles全局通用样式复用Styles 用于抽取多个组件通用的公共样式仅复用样式属性不复用UI结构。适用于全局统一的字体、颜色、边距、对齐等基础样式。核心特点无组件绑定、全局可调用、轻量化、仅样式复用。适用场景统一页面文本样式、统一按钮默认样式、统一卡片边距圆角。// 全局通用样式 Styles function commonText() { .fontSize(14) .fontColor(#333333) .margin(10) } Styles function cardBg() { .backgroundColor(Color.White) .borderRadius(12) .shadow(0.5, 10, Color.Gray) .padding(12) }(2)Extend专属组件样式扩展与 Styles 不同Extend绑定指定原生组件只能作用于目标组件可以扩展原生组件属性甚至绑定专属交互逻辑。核心特点组件专属、可扩展原生能力、比 Styles 功能性更强。适用场景自定义专属Text文本、专属Button按钮实现全局统一的定制化组件样式。// 专属Text组件扩展样式 Extend(Text) function titleText() { .fontSize(18) .fontWeight(FontWeight.Bold) .fontColor(#000) }(3)BuilderUI结构片段复用Builder 是 ArkUI 中复用UI结构的核心方案可以封装一段重复的组件结构支持传参、支持动态数据渲染是页面局部复用的最优解。同时搭配 BuilderParam 可以实现父组件向子组件注入自定义UI片段实现高灵活度的组件插槽效果极大提升组件的复用性和扩展性。适用场景列表卡片、通用标题栏、通用空数据页面、重复弹窗结构。// 封装通用卡片布局 Builder function GoodsCard(name: string, price: number) { Column() { Text(name).titleText() Text(¥${price}).fontColor(#f56c6c).fontSize(16) } .cardBg() .width(100%) }三、自定义组件与父子组件通信原理单纯的结构复用只能解决代码冗余问题想要实现数据驱动UI更新必须依靠组件状态通信机制。在模块化开发中页面会拆分为父组件与多个子组件数据由父组件统一管理子组件负责展示通过单向数据流实现状态统一管理。(1)核心通信装饰器Prop 单向传值Prop 用于实现父组件向子组件单向数据传递是项目中最常用的组件通信方式。父组件使用 State 定义状态变量通过传参传递给子组件的 Prop 变量。核心机制父组件数据更新 → 自动同步子组件 → 子组件UI自动刷新子组件无法修改父组件数据保证数据流单向可控避免状态混乱。(2)State 与 Prop 职责区分很多新手误区子组件定义大量 State 状态。实际工程规范中State仅用于组件内部私有状态不对外暴露Prop用于接收父组件传递的业务数据只读、可响应更新该机制保证了数据来源唯一是复杂页面状态不乱、易于维护的关键。3购物车案例子组件 GoodsItem.etsComponent export struct GoodsItem { // 接收父组件传值 Prop goodsName: string Prop goodsCount: number build() { Row() { Text(this.goodsName) Text(数量${this.goodsCount}) } .commonText() } }父组件页面使用 状态更新import { GoodsItem } from ./GoodsItem Entry Component struct Index { // 父组件唯一数据源 State name: string 鸿蒙学习手册 State count: number 1 build() { Column() { // 子组件绑定父状态 GoodsItem({ goodsName: this.name, goodsCount: this.count }) // 修改父状态子组件自动刷新 Button(增加数量) .onClick(() { this.count }) } .padding(20) } }四、总结三者复用方案各司其职样式复用统一界面、Builder 结构复用精简代码、自定义组件Prop通信实现业务解耦。掌握这套体系后已经具备开发中大型电商级复杂页面的能力摆脱新手式重复编码写出规范、简洁、可维护的鸿蒙代码。

相关新闻

大模型技术竞赛现状与未来趋势分析

大模型技术竞赛现状与未来趋势分析

1. 大模型技术竞赛现状全景扫描2023年全球科技行业最引人注目的现象,莫过于各大科技机构在大型语言模型(LLM)领域的军备竞赛。这场竞赛的激烈程度远超预期,呈现出三个典型特征:迭代速度指数级增长:GPT-4到G…

2026/10/13 0:20:20 阅读更多 →
Soft Prompt(软提示)

Soft Prompt(软提示)

Soft Prompt(软提示)可以理解为:不是人写出来的文字提示,而是一组由模型学习出来的向量提示。1. 先理解普通提示词我们平时输入给大模型的文字,例如:请根据用户历史记录推荐一部电影。这种能直接看到、读懂…

2026/10/13 7:09:56 阅读更多 →
别再瞎找了!盘点2026年顶流之选的的降AIGC软件

别再瞎找了!盘点2026年顶流之选的的降AIGC软件

轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的降AIGC软件神器,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,帮你稳妥搞定毕业论文。 一、全流程王者:一站式搞定论文全链路 这类工具…

2026/10/13 16:42:15 阅读更多 →

最新新闻

Java面试实录:从JVM到MySQL,那些让面试官崩溃的基础错误

Java面试实录:从JVM到MySQL,那些让面试官崩溃的基础错误

互联网大厂Java开发者面试实录:严肃面试官遇上搞笑水货程序员谢飞机如果你没经历过那种"简历挺漂亮,开口就崩盘"的Java面试,那你可能还没当过面试官。我在某头部电商平台做Java技术面试官已经有年头了,每周至少面七八个…

2026/10/13 18:17:10 阅读更多 →
AnyPS5:PS5跨平台兼容性问题的技术本质与工程应对

AnyPS5:PS5跨平台兼容性问题的技术本质与工程应对

1. “AnyPS5”不是产品型号,而是一类跨平台兼容性问题的代号“AnyPS5”这个标题乍看像某款新主机或破解工具的代号,但实际在技术社区中,它早已演变为一个隐含多重语义的行业暗语——它不指向某个具体硬件,而是指代一类在非原生PS5…

2026/10/13 18:17:10 阅读更多 →
一文掌握 TypeScript 泛型:约束、推断、条件类型与项目实战封装

一文掌握 TypeScript 泛型:约束、推断、条件类型与项目实战封装

写 TypeScript 这几年,TypeScript Generics 泛型是我花时间最长才真正理解的部分,也是后来收获最大的一部分。早期写工具函数或者封装库的时候,我最常用的手段就是 any,偶尔兴致来了把 any 换成 unknown,结果类型报错从…

2026/10/13 18:17:10 阅读更多 →
群同构同态定理详解:从正规子群到商群的一站式攻克

群同构同态定理详解:从正规子群到商群的一站式攻克

如果你也正在啃抽象代数,估计你和我当年一样,第一遍学到“群同构同态定理”的时候,心里是有点发毛的。明明只是三行定理,却牵出正规子群、商群、陪集、核与像一整套概念,做题时又不知道从哪下手。这篇文章就是想把这块…

2026/10/13 18:17:10 阅读更多 →
监控数据丢失?OpenFalcon Transfer 多重备份方案与实战

监控数据丢失?OpenFalcon Transfer 多重备份方案与实战

一、为什么要盯住 Transfer:监控链路里最容易丢数据的一环凡是维护过自建监控系统的人,大概率都被同一个问题折磨过:数据明明从 agent 发出去了,图表上却出现了断点,等到想排查的时候,几个小时前的原始数据…

2026/10/13 18:17:10 阅读更多 →
Scratch图层顺序详解:背景为何会挡住角色?层次指令一次弄懂

Scratch图层顺序详解:背景为何会挡住角色?层次指令一次弄懂

1. 一个让人抓狂的现象:背景为什么会跑到角色前面去前阵子有人拿着一个半成品的Scratch作品来问我:“背景坏了不显示前面了,明明画好了山和天空,运行起来整个画面却被一块黑乎乎的东西盖住,角色怎么点都不出现。”我打…

2026/10/13 18:16:09 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →