
前言通用组件是提升代码复用率的核心手段。ArkUI 通过Component装饰器让开发者可以封装自定义组件支持Prop参数化输入。本篇以小分享 App 的ShareCard组件为例讲解通用组件的设计原则和Prop装饰器的使用。详细 API 可参考 HarmonyOS Component 官方文档。一、ShareCard 组件完整代码1.1 组件定义import router from ohos.router; Preview Component export struct ShareCard { Prop title: string ; Prop subtitle: string ; Prop icon: string ; Prop iconBg: string #EEF4FF; Prop pageUrl: string ; build() { Row({ space: 12 }) { // 图标徽章 Column() { Text(this.icon) .fontSize(24) } .width(48) .height(48) .backgroundColor(this.iconBg) .borderRadius(12) .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center) // 文字区 Column({ space: 4 }) { Text(this.title) .fontSize(15) .fontWeight(FontWeight.Medium) .fontColor(#1A1A1A) Text(this.subtitle) .fontSize(12) .fontColor(#999999) } .alignItems(HorizontalAlign.Start) .layoutWeight(1) // 箭头 Text(›) .fontSize(20) .fontColor(#CCCCCC) } .width(100%) .padding({ left: 16, right: 16, top: 14, bottom: 14 }) .backgroundColor(Color.White) .borderRadius(12) .shadow({ radius: 2, color: #08000000, offsetY: 1 }) .onClick(() { if (this.pageUrl) { router.pushUrl({ url: this.pageUrl }) } }) } }二、Component 与 Prop 装饰器2.1 Component 的作用Component标记一个类为自定义组件使其可以被其他组件引用。2.2 Prop 的基本用法Prop让父组件向子组件传递数据子组件可以修改但不影响父组件Component export struct ShareCard { Prop title: string ; // 默认值 Prop subtitle: string ; Prop icon: string ; Prop iconBg: string #EEF4FF; // 带默认值 Prop pageUrl: string ; }2.3 Prop 特性特性说明单向数据流父→子子修改不影响父默认值可以设置默认值响应式父组件更新时自动刷新类型支持基本类型、对象、数组三、Preview 装饰器3.1 Preview 的作用Preview允许在 DevEco Studio 的预览器中实时预览组件效果Preview Component export struct ShareCard { // ... }3.2 预览优势预览优势如下无需编译运行即可看到 UI 效果实时编辑实时刷新支持不同设备尺寸预览四、组件布局结构4.1 布局结构Row (白色卡片圆角 12阴影) ├─ Column (图标徽章 48×4812vp 圆角iconBg 背景色) │ └─ Text(icon) 24px ├─ Column (文字区layoutWeight 撑开) │ ├─ Text(title) 15px 粗体 │ └─ Text(subtitle) 12px 灰色 └─ Text(›) 20px 灰色 → 右侧箭头4.2 参数化设计ShareCard 将 5 个核心属性全部参数化属性类型默认值作用titlestring‘’主标题subtitlestring‘’副标题iconstring‘’图标iconBgstring‘#EEF4FF’图标背景色pageUrlstring‘’点击跳转路径五、组件使用方法5.1 在页面中引用import { ShareCard } from ../components/ShareCard; Component struct SomePage { build() { Column() { ShareCard({ title: 文字分享, subtitle: 记录想法分享文字, icon: , iconBg: #EEF4FF, pageUrl: pages/TextEditPage }) ShareCard({ title: 图片分享, subtitle: 分享美图记录美好, icon: ️, iconBg: #E8F5E9, pageUrl: pages/ImageEditPage }) } } }5.2 组件复用优势组件复用优势如下减少重复代码同一套 UI 逻辑只需写一次统一风格所有 ShareCard 外观一致便于维护修改组件定义即可全局更新可测试单独测试组件逻辑六、点击事件与路由6.1 点击跳转.onClick(() { if (this.pageUrl) { router.pushUrl({ url: this.pageUrl }) } })6.2 空值判断if (this.pageUrl)确保pageUrl为空时不跳转避免路由错误。七、组件设计原则7.1 通用组件设计原则通用组件设计原则如下单一职责一个组件只做一件事参数化所有可变的属性都通过参数传入默认值非必需参数设置合理的默认值可复用组件不依赖特定的页面上下文7.2 组件层级小分享 App 的组件层级如下页面层HomePage, TextEditPage, ... │ 组件层BottomTabBar, ShareCard, CategoryIcon │ 接口层TabItem, CategoryItem, ShareOption, ...八、本篇核心知识点8.1 Component 与 Prop 核心要点总结如下Component标记自定义组件Prop声明父→子数据传递Preview支持 DevEco Studio 预览参数化设计提升复用性8.2 实战开发要点实战开发中需要重点关注以下几个要点所有可变属性参数化设置默认值组件不依赖特定上下文点击事件处理空值情况使用Preview提升开发效率总结本文详细讲解了 ShareCard 通用分享卡片组件的设计涵盖Component、Prop、Preview装饰器、布局结构、参数化设计和组件复用原则。至此小分享 App 首页相关的所有核心内容已讲解完毕。下一篇我们将进入 BottomTabBar 组件详解。附录完整实现细节1. 核心 API 参考API作用说明本文涉及的核心 API功能实现参见华为官方文档2. 完整代码示例// 核心功能代码 // 详见正文中的完整实现3. 常见问题排查问题原因解决方案编译错误import 路径错误检查路径和 API 版本运行时异常参数不合法使用 try/catch 捕获性能问题主线程耗时操作使用异步 API4. 最佳实践错误处理完善使用 try/catch 包裹资源及时释放避免内存泄漏异步操作使用 async/await权限配置完整按需申请5. 完整代码文件索引文件路径说明本文涉及的代码文件见正文6. 实现要点总结核心实现要点API 的正确使用方法和参数说明完整的代码实现流程常见问题的排查方案性能优化和安全建议7. 总结本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践。开发注意事项1. API 版本兼容性确保使用的 API 在目标 SDK 版本中可用。不同版本的 HarmonyOS 可能对 API 的支持有所不同建议查阅官方文档确认。2. 权限配置根据功能需求配置相应的系统权限。权限在 module.json5 中声明运行时通过 abilityAccessCtrl 申请。3. 错误处理所有异步操作使用 try/catch 包裹确保异常不会导致应用崩溃。错误信息通过 hilog 输出便于调试。4. 资源释放使用完毕后及时释放系统资源避免内存泄漏。例如文件操作后关闭文件句柄数据库操作后关闭 ResultSet。5. 性能优化避免在主线程执行耗时操作使用异步 API 处理耗时任务。大量数据渲染时使用 LazyForEach 懒加载。完整代码文件索引文件路径说明本文涉及的代码文件见正文核心 API 参考API/组件用途文档链接文中涉及的 API核心功能华为官方文档总结本文详细讲解了小分享 App 中对应功能的完整实现涵盖 API 使用、代码示例、常见问题、性能优化等核心知识点。通过本文的学习读者可以掌握 HarmonyOS 开发的完整流程。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力