当前位置: 首页 > news >正文

HarmonyOS 多设备短视频开发 : 07 — ArkUI 组件化设计:从公共组件库到业务模块复用

07 — ArkUI 组件化设计:从公共组件库到业务模块复用

一、引言

在多设备短视频项目中,组件化设计体现在两个层面:一是 common 层的公共组件库,二是 features 层的业务模块封装。本文分析组件化设计思想、组件职责划分和跨模块复用机制。

二、公共组件库(common/multishortvideobase)

2.1 MSVTextIcon — 图文混合组件

最常用的基础组件,支持图标+文字+Builder 三种模式:

@ComponentV2 export struct MSVTextIcon { @BuilderParam content?: BuilderCallback; // 自定义内容 public text?: ResourceStr; // 文字 public iconOnly?: boolean; // 纯图标模式 public icon?: Resource; // 图标资源 public iconDark?: Resource; // 深色模式图标 public iconSize?: Length; // 图标尺寸 build() { if (this.content) { this.content() // Builder 模式 } else if (this.iconOnly) { Image(this.icon) // 纯图标模式 } else { Row() { Image(this.icon); Text(this.text) } // 图文混合 } } }

使用示例:

// 纯图标 MSVTextIcon({ src: $r('app.media.ic_heart_fill'), iconSize: 24 }) // 图文混合 MSVTextIcon({ src: $r('app.media.ic_heart_fill'), iconOnly: false, content: '1557', iconSize: 32 })

2.2 MSVTabs — 公共标签页组件

支持 HDS 浮动标签和原生 Tabs 两种模式,自动检测系统能力:

@ComponentV2 export struct MSVTabs { @Require @Param data: MSVDataModel[]; @Param useFloating: boolean = true; // 是否使用 HDS 浮动样式 @Param barPosition: BarPosition = BarPosition.Start; @Param barOverlap: boolean = true; // ... build() { if (canIUse('SystemCapability.UIDesign.HDSComponent.Core') && this.useFloating) { // HDS 浮动标签(智慧屏、电脑等) HdsTabs({ index: this.activeIndex }) { ... } .barFloatingStyle({ ... }) } else { // 原生 Tabs Tabs({ index: this.activeIndex }) { ... } .barBackgroundBlurStyle(BlurStyle.NONE) } } }

2.3 MSVEmptyComponent — 空状态组件

当数据为空时显示,统一空状态 UI。

2.4 MSVDataModel — 数据模型

export class MSVDataModel { public content?: BuilderCallback | null; // 标签页内容 public text?: ResourceStr; // 标签文字 public iconOnly?: boolean; // 纯图标标签 public icon?: Resource; // 正常图标 public iconDark?: Resource; // 深色图标 public iconSize?: Length; // 图标尺寸 }

三、业务模块复用(features 层)

3.1 视频播放模块

multishortvideoadaptivevideo对外暴露AdaptiveVideoAdaptiveVideoForDefault两个组件,后者增加了持握手势感知(鸿蒙左手/右手持握识别)。

3.2 评论区模块

multishortvideocomment对外暴露Comment组件,同时被半模态弹窗和侧边分栏复用:

// 半模态弹窗中 .bindSheet($$this.showComment, () => { Comment() }, { ... }) // 侧边分栏中 NavDestination() { Column() { Comment() } }

3.3 个人作品页模块

multishortvideoindividual对外暴露IndividualByRouter(带路由的入口)和内部组件IndividualWorks

四、跨模块通信机制

4.1 @Provider/@Consumer 装饰器

根组件通过@Provider提供共享状态,子组件通过@Consumer消费:

// 根组件(Index.ets) @Provider('pathStack') pathStack: NavPathStack = new NavPathStack(); @Provider('showSideComment') showSideComment: boolean = false; @Provider('showSideIndividual') showSideIndividual: boolean = false; @Provider('isDark') isDark: boolean = false; // 子组件(AdaptiveVideo.ets) @Consumer('showSideComment') showSideComment: boolean = false; @Consumer('showSideIndividual') showSideIndividual: boolean = false; @Consumer('pathStack') pathStack: NavPathStack = new NavPathStack();

4.2 @Local 本地状态

组件内部状态管理,用于 UI 响应的局部变量。

4.3 @Param 参数传递

AdaptiveAVPlayer({ currentIndex: this.curIndex, index: item.index, currentSource: item.item.currentSource, seekToTime: this.seekToTime, onStateNotify: (state) => { this.currentState = state; } })

五、组件化原则总结

  • 单一职责:每个组件只做一件事,MSVTextIcon 只负责图文展示,MSVTabs 只负责标签导航
  • 参数化配置:通过@Param和属性字段控制组件行为,避免硬编码
  • Builder 插槽:使用@BuilderParam提供自定义内容插槽,增强灵活性
  • 跨模块复用:features 层组件解耦,products 层按需组合
  • 响应式状态@Provider/@Consumer实现跨层级数据共享,避免 prop drilling

http://www.cnnetsun.cn/news/4329995.html

相关文章:

  • Cohere企业级AI实战:RAG、多语言与API接入指南
  • Gurobi 与 Jupyter/Colab 环境配置及优化建模案例实战
  • 第二十八集雾版制作全流程:从版本管理到发布检查要点
  • claude-video参数速查表:watch.py全部8个选项的完整参考
  • phpcolor v4.0:轻量级PHP贴吧社区程序重构与实战解析
  • 360春招PHP笔试客观题复盘:从考点陷阱到安全直觉
  • Upscayl:免费开源AI图像放大工具,3步出4倍高清图
  • AIGC时代版权维护:从法务到工程的溯源治理实践
  • 重分布成本推断:破解稀疏安全离线强化学习难题
  • 用数据思维破解网红店购物难题:125-160斤女生科学选衣指南
  • Jupyter Notebook + Python虚拟环境:NLP关键词提取环境搭建实战
  • idata 95系列刷机救砖指南:A5V2R2工具包全流程解析
  • 省钱型AI编程Agent实战:本地部署、API接入与批量任务全解析
  • 软件调试实战:从bug分类到最小复现与日志分析
  • CompletableFuture顺序工作流异步执行与异常处理实践
  • 计算机毕业设计之基于BS架构的酒店管理系统设计与实现
  • Umi-OCR离线OCR快速指南:5分钟完成图片文字识别与批量导出
  • SSM框架从零搭建图书管理系统:Spring+SpringMVC+MyBatis整合实战
  • Python漫画爬虫实战:接口解析、并发下载与zip打包全攻略
  • 2026深圳工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐
  • 2026沈阳工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐
  • go-zero电商后台脚手架Zero-Admin:从框架原理到二次开发实践
  • Python+分布式架构:基于CARLA的自动驾驶仿真系统解析
  • aigc率检测和论文查重有什么区别?看懂报告后再决定怎样AI降重?
  • ops-nn Tiling策略详解:张量切分与并行调度的核心机制和3大交付件
  • 幻影防务 MPX 3.0 安装全指南:从环境检查到启动验证
  • AI生成内容加水印:技术原理、落地挑战与可信互联网的基石
  • 从1946到2023:zip压缩包解压与数据修复全记录
  • Kronos:基于预训练+微调的金融K线时序预测模型实战指南
  • 植物叶片分割数据集构建与模型调优实战:从0.62到0.87