3、构建你的第一个鸿蒙组件化 UI 页面:实现可复用的卡片组件(附实战代码)


鸿蒙开发的精髓,不止在于可以"一次开发,多端部署",更关键的是------组件化能力超强!本篇文章带你构建一个可复用的「信息卡片组件」,掌握 HarmonyOS ArkTS 的组件化开发精髓!


🎯 一、目标效果

实现一个通用的信息卡片组件,具备以下能力:

  • 支持标题、副标题展示
  • 可自定义图标
  • 可响应点击事件
  • 实现组件复用(传入不同参数即可渲染不同内容)

最终效果示意:

css 复制代码
[📦] 今日订单
     已完成:123单

🧱 二、项目结构预设

markdown 复制代码
- pages/
  - Index.ets         // 主页面,引用组件
- components/
  - InfoCard.ets      // 自定义信息卡片组件

🧩 三、创建组件 InfoCard

路径:components/InfoCard.ets

less 复制代码
@Component
export struct InfoCard {
  @Prop title: string
  @Prop subtitle: string
  @Prop icon: string
  @Prop onTap: () => void

  build() {
    Row() {
      Text(this.icon).fontSize(28).margin({ right: 12 })
      Column() {
        Text(this.title).fontSize(18).fontWeight(FontWeight.Bold)
        Text(this.subtitle).fontSize(14).margin({ top: 4 }).opacity(0.6)
      }
      .justifyContent(FlexAlign.Center)
    }
    .padding(16)
    .backgroundColor('#f5f5f5')
    .borderRadius(12)
    .width('90%')
    .margin({ top: 8, bottom: 8 })
    .onClick(() => this.onTap?.())
  }
}

✅ 核心点:

  • 使用 @Prop 实现组件参数传递
  • 使用 onClick 响应用户交互
  • UI 布局使用 Row + Column 组合,轻量易读

🧪 四、在主页中使用组件

路径:pages/Index.ets

less 复制代码
import InfoCard from '../components/InfoCard'

@Entry
@Component
struct Index {
  build() {
    Column() {
      InfoCard({
        icon: '📦',
        title: '今日订单',
        subtitle: '已完成:123单',
        onTap: () => {
          console.log('点击了订单卡片')
        }
      })

      InfoCard({
        icon: '💰',
        title: '本月收入',
        subtitle: '¥18,250',
        onTap: () => {
          console.log('点击了收入卡片')
        }
      })
    }
    .width('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .backgroundColor('#ffffff')
  }
}

📌 五、实操总结

技术点 说明
@Prop 定义可传入参数,类似 props
onClick 原生支持点击事件
组件封装 类似 React/Vue 的组件化思想
样式控制 使用 ArkTS 声明式语法完成布局与样式

📦 六、拓展优化建议

你可以进一步扩展组件功能,如:

  • 支持图标图片 URL(Image 渲染)
  • 支持背景色动态配置
  • 添加右侧操作按钮(如「查看」)

📘 下篇预告

《状态驱动开发入门:玩转 @State 与 @Provide》------带你深入鸿蒙响应式架构的本质,教你如何构建多组件共享状态!


相关推荐
烛阴6 分钟前
Python数据可视化:从零开始教你绘制精美雷达图
前端·python
全栈前端老曹9 分钟前
【前端组件封装教程】第3节:Vue 3 Composition API 封装基础
前端·javascript·vue.js·vue3·组合式api·组件封装
canonical_entropy21 分钟前
最小信息表达:从误解到深层理解的五个关键点
后端·架构
LinXunFeng28 分钟前
Flutter 拖拉对比组件,换装图片前后对比必备
前端·flutter·开源
2501_9197490328 分钟前
配置flutter鸿蒙的环境和创建并运行第一个flutter鸿蒙项目【精心制作】
flutter·华为·harmonyos
BD_Marathon28 分钟前
【PySpark】安装测试
前端·javascript·ajax
stu_kk37 分钟前
Ecology9明细表中添加操作按钮与弹窗功能技术分享
前端·oa
dkgee38 分钟前
如何禁止Chrome的重新启动即可更新窗口弹窗提示
前端·chrome
郝开39 分钟前
Spring Boot 2.7.18(最终 2.x 系列版本):版本概览;兼容性与支持;升级建议;脚手架工程搭建
java·spring boot·后端
天若有情6731 小时前
新闻通稿 | 软件产业迈入“智能重构”新纪元:自主进化、人机共生与责任挑战并存
服务器·前端·后端·重构·开发·资讯·新闻