写一次,用百次——鸿蒙自定义组件开发与复用的那些“小妙招”【华为根技术】

举报
Echo_Wish 发表于 2025/11/12 10:01:40 2025/11/12
【摘要】 写一次,用百次——鸿蒙自定义组件开发与复用的那些“小妙招”

写一次,用百次——鸿蒙自定义组件开发与复用的那些“小妙招”

作者:Echo_Wish


一、引子:当代码写到第三次复制粘贴时,心里就该警觉了

我相信很多开发者都经历过这样的瞬间:
你在鸿蒙项目里写UI,一次、两次、三次复制那段“固定样式的卡片组件”,心里嘀咕着:

“这玩意儿我昨天不是刚写过吗?”

没错,这就是重复劳动的警报信号

鸿蒙开发中,特别是使用ArkUI(方舟UI)的声明式语法时,我们往往会为了赶进度而“先写出来再说”。但时间一长,UI重复代码堆成山,维护成本飙升。改个颜色要全局搜,改个交互要手动调。

这时候,你就该意识到:
👉 组件化才是正解。

今天这篇,我们就从“为什么要自定义组件”聊到“怎么复用更优雅”,再加上实战案例和一点“Echo_Wish式的开发哲学”。咱不搞虚的,干货直接上。


二、原理讲解:自定义组件,本质就是“封装思维”

先别急着敲代码,咱来捋清楚——自定义组件到底解决了啥问题?

简单说,鸿蒙的UI框架(ArkUI)是基于声明式编程模型的,你定义一个@Component,它就能像积木一样被拼到页面上。
这种设计特别适合构建“可复用、可维护、可独立演化”的UI单元。

举个例子:

  • 你写了一个商品卡片组件;
  • 在首页、推荐页、搜索页都要用;
  • 如果哪天设计师说“卡片要圆角、要阴影、要点击动画”;
  • 你只改组件,不用改三处代码。

这就是自定义组件的意义:

代码一次写好,逻辑一次封装,样式一次定义,处处可用。

而复用的核心,就是“抽象”——
别让业务逻辑和UI样式粘在一起,而是分层封装,参数化可配置。


三、实战代码:做一个可复用的“商品卡片组件”

咱直接动手写个例子。假设我们要在鸿蒙(ArkTS)中定义一个商品展示卡片

@Component
export struct ProductCard {
  // 接收父组件传入的属性
  @Prop productName: string;
  @Prop price: number;
  @Prop imageUrl: string;
  @Prop onClick: () => void;

  build() {
    Column() {
      Image(this.imageUrl)
        .width('100%')
        .height(150)
        .borderRadius(12)
        .objectFit(ImageFit.Cover)

      Text(this.productName)
        .fontSize(18)
        .fontWeight(FontWeight.Medium)
        .margin({ top: 8 })

      Text(`${this.price}`)
        .fontSize(16)
        .fontColor(Color.Red)
        .margin({ top: 4 })
    }
    .padding(10)
    .borderRadius(12)
    .backgroundColor(Color.White)
    .shadow({ radius: 8, color: '#e0e0e0', offsetY: 4 })
    .onClick(() => this.onClick())
  }
}

这段代码非常直观:

  • 使用@Component定义组件;
  • @Prop接收外部参数;
  • 内部用声明式语法定义结构与样式;
  • 最后绑定点击事件。

然后在页面中使用时就非常简单:

ProductCard({
  productName: "鸿蒙智能手表",
  price: 1299,
  imageUrl: "/common/watch.png",
  onClick: () => { router.pushUrl({ url: "pages/detail" }) }
})

这就像搭积木一样。
一次定义,随处使用,清晰、优雅、无副作用。


四、场景应用:组件化思维让团队开发效率翻倍

组件复用最大的意义,不在于“少写几行代码”,而在于协作效率的提升

想象这样一个场景:
公司要做一个“商城类App”,涉及多个页面:

  • 首页推荐
  • 商品列表
  • 搜索结果
  • 收藏夹

这四个地方都需要展示商品卡片。

如果每个开发者都各写一份,结果一定是:

  • 样式不一致;
  • 交互不统一;
  • 一旦改设计,全员加班。

但如果有个统一的ProductCard组件库,就像刚才写的那样,
大家只要调用,不需要再造轮子。

甚至可以进一步抽象出“组件库模块化结构”:

/common
  ├── components
  │     ├── ProductCard.ets
  │     ├── EmptyState.ets
  │     ├── LoadingView.ets
  │     └── UserAvatar.ets
  ├── utils
  │     ├── formatPrice.ets
  │     ├── timeHelper.ets

这不仅提升了复用率,也让项目结构清晰、维护成本降低。

你甚至可以发布成一个内部组件库,通过npm或ohpm(OpenHarmony包管理器)来统一管理。
这样,真正实现了**“一次开发,全局复用”**。


五、Echo_Wish式思考:复用的不只是代码,更是思维

说点心里话。
我见过太多开发者忙着“写功能”,却很少花时间“写结构”。

其实,写代码是技术,写组件是思维。

当你开始有意识地去“复用”,你就在走向架构师的路上。
因为组件化的核心不是“减少工作量”,而是让系统可进化

鸿蒙生态正在快速成长,从应用到设备、从UI到跨端能力,
未来一定是“组件驱动”的世界。
谁能把复杂的业务抽象成高内聚、低耦合的组件,
谁就能在鸿蒙的浪潮中游得更远。

另外,我特别喜欢一句话送给你:

“重复劳动是开发者的耻辱,复用能力是工程师的尊严。”

组件不仅仅是一块UI,更是一种理念。
当你把常用组件封装成库,分享给团队、社区甚至开源出去,
你会发现——写代码也能有“传承”的感觉。


六、结语:从写页面到写框架,是开发者的成长曲线

自定义组件的开发与复用,看似是小技巧,
其实是从“执行型开发”到“架构型思维”的一次跃迁。

在鸿蒙世界里,这种“积木式开发”理念,会让我们的工作更自由、更高效。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。