🧩 鸿蒙开发进阶|组件复用终极指南:@Component 还是 @Builder?一篇讲透!HarmonyOS 架构设计 · 告别重复代码,拥抱高效开发
大家好,我是 程序员小V 👨💻
你是否遇到过这些场景?
这些问题的根源,都是缺乏组件化思维!
今天我们就深入 ArkTS 的两大组件复用方案,教你如何写出高内聚、低耦合、易维护的鸿蒙应用!
随着项目规模扩大,单一组件文件会迅速膨胀,导致:
✅ 组件化的目标:
• 一次编写,多处使用 • UI 与逻辑解耦 • 支持单元测试 • 提升团队协作效率
在 ArkTS 中,官方提供了两种主流复用方式:
@Component + @Prop) → 跨页面复用@Builder) → 页面内复用下面,我们逐一对比,帮你选对方案!
这是最常用、最推荐的方式,尤其适合通用 UI 单元(如用户卡片、商品项、消息气泡等)。
components/ 文件夹;UserCard.ets 文件;@Component + @Prop 封装;// src/main/ets/components/UserCard.ets
import { User } from "../common/UserDemo"
@Component
export struct UserCard {
@Prop item: User; // 接收父组件数据
build() {
Column() {
Text('姓名:' + this.item.name)
.fontSize(16)
.fontWeight(FontWeight.Bold)
Text('邮箱:' + this.item.email)
.fontSize(14)
.fontColor('#666')
}
.width('100%')
.padding(10)
.backgroundColor('#f9f9f9')
.borderRadius(8)
}
}💡 关键点:
• @Prop:单向数据流,子组件不能修改传入值;• export struct:必须导出才能被导入;• 路径建议: src/main/ets/components/,统一管理。

在父组件中导入并调用:
import { UserCard } from '../components/UserCard'
// ...
ForEach(this.users, (item: User) => {
UserCard({ item: item }) // ⚠️ 必须用 { } 包裹参数!
})❌ 常见错误:
写成UserCard(item)会报错!ArkTS 要求具名参数必须显式声明。

item 类型@State、@Link 等@Builder 是一种函数式 UI 复用机制,适用于同一页面内的重复片段。
在当前组件内部定义:
// 在 Index.ets 内部
@Builder
renderUserItem(item: User) {
Column() {
Text('姓名:' + item.name)
Text('邮箱:' + item.email)
}
.padding(10)
.margin(5)
}直接调用,像普通函数:
ForEach(this.users, (item: User) => {
this.renderUserItem(item) // 无需导入,直接调用
})
@State 等状态装饰器 |
📌 使用建议:
• 列表项、表单项等页面内重复内容 → 用 @Builder• 用户卡片、弹窗、按钮等通用 UI → 用独立组件
@Component) | @Builder) | |
|---|---|---|
| 作用域 | ||
| 数据传递 | @Prop | |
| 状态管理 | @State/@Link | |
| 性能开销 | ||
| 适用场景 | ||
| 工程结构 |

PascalCase → UserCard.etscamelCase → renderUserItemsrc/main/ets/
├── components/ # 通用组件
│ ├── UserCard.ets
│ └── ProductItem.ets
├── pages/ # 页面
└── common/ # 模型、工具类若某 UI 只用一次,不要强行抽取!保持代码简洁更重要。
无论哪种方式,务必添加 TypeScript 类型注解:
renderUserItem(item: User) // ✅ 明确类型@Component) = 重型武器 → 跨页面、复杂交互、长期维护@Builder) = 轻量工具 → 页面内、简单 UI、快速实现🌟 高手思维:
不是“会不会拆组件”,而是“在正确场景用最合适的方式”。
掌握这两种复用模式,你就能构建出结构清晰、易于扩展、团队友好的鸿蒙应用架构!
作者:程序员小V(VON)
专注 HarmonyOS / Flutter / OpenHarmony 开发
用代码构建生态,用分享照亮他人
👉 关注我的 CSDN 主页,获取更多鸿蒙实战教程:
🔗 https://blog.csdn.net/2302_80329073