当前位置:首页>鸿蒙APP>鸿蒙应用开发第一步:从空工程到状态驱动

鸿蒙应用开发第一步:从空工程到状态驱动

  • 2026-10-20 05:22:13
鸿蒙应用开发第一步:从空工程到状态驱动

鸿蒙应用开发第一步:从空工程到状态驱动

HarmonyOS NEXT 搭建了一套以 Kit 为维度的开放能力体系,涵盖应用框架、系统、媒体、图形、应用服务和 AI 六大领域。其中 Ability Kit 管程序生命周期,ArkUI 管 UI 渲染,Network Kit 管网络通信——开发者不需要从底层拼装,选对 Kit 就能快速起步。

今天我们从官方文档的视角出发,走一遍 HarmonyOS 应用开发的核心路径:理解 Stage 模型工程结构,用 ArkTS 声明式语法写页面,通过 @State 实现状态驱动 UI 刷新。

Stage 模型与工程结构

DevEco Studio 创建的 "Empty Ability" 模板会生成一套标准目录:

•AppScope/app.json5:全局配置,定义 bundleName、应用图标和名称。
•entry/src/main/ets/pages/Index.ets:默认首页,UI 代码写在这里。
•entry/src/main/ets/entryability/:入口 Ability,系统启动时加载 pages/Index.ets。
•entry/src/main/resources/:资源文件,图片、字符串、颜色统一管理。

这套结构就是 Stage 模型的核心:Ability 负责生命周期调度,Pages 负责页面渲染,Resources 负责资源隔离。三者各司其职,代码不会挤在一个文件里。

@State:状态驱动 UI 的关键

ArkTS 声明式 UI 的核心理念是「数据变,UI 自动变」。@State 装饰器标记的变量一旦被修改,框架会自动重新渲染引用了该变量的 UI 组件。开发者不需要手动操作 DOM,只需关注数据本身。

来看一个经典示例。

Demo 1:文本切换

点击按钮,文字在 "Hello World" 和 "Hello HarmonyOS" 之间切换。这是理解 @State 最直观的入口。

"color:#6a9955">#6a9955">// Index.ets"color:#6a9955">#c586c0">@Entry"color:#6a9955">#c586c0">@Componentstruct Index {"color:#6a9955">#c586c0">@State message: string = 'Hello World';  build() {    Column() {      Text(this.message)        .fontSize(28)        .fontWeight(FontWeight.Bold)        .fontColor('"color:#6a9955">#333333')        .margin({ bottom: 24 })      Button('点击切换')        .width('80%')        .height(48)        .fontSize(16)        .fontColor('"color:#6a9955">#FFFFFF')        .backgroundColor('"color:#6a9955">#0A59F7')        .borderRadius(24)        .onClick(() => {if (this.message === 'Hello World') {this.message = 'Hello HarmonyOS';          } else {this.message = 'Hello World';          }        })    }    .width('100%')    .height('100%')    .justifyContent(ForeignConst.Center)    .alignItems(HorizontalAlign.Center)  }}

当 onClick 触发时,this.message 被重新赋值,@State 监听到变化,自动触发 Text 组件重新渲染。整个流程不需要手动调用 setText 或 invalidate。

Demo 2:模拟实时数据卡片

结合 Network Kit 的思路,我们用定时器模拟网络请求,展示数据获取后 UI 自动更新的效果。这在天气、股票、消息列表等场景中非常常见。

"color:#6a9955">#6a9955">// WeatherCard.ets"color:#6a9955">#c586c0">@Entry"color:#6a9955">#c586c0">@Componentstruct WeatherCard {"color:#6a9955">#c586c0">@State city: string = '加载中...';"color:#6a9955">#c586c0">@State temperature: string = '--';"color:#6a9955">#c586c0">@State weather: string = '--';"color:#6a9955">#c586c0">@State isRefreshing: boolean = false;  aboutToAppear() {this.fetchWeatherData();  }  fetchWeatherData() {this.isRefreshing = true;"color:#6a9955">#6a9955">// 模拟网络请求延迟    setTimeout(() => {this.city = '深圳';this.temperature = '31°C';this.weather = '晴转多云';this.isRefreshing = false;    }, 2000);  }  build() {    Column({ space: 16 }) {"color:#6a9955">#6a9955">// 城市名称      Text(this.city)        .fontSize(24)        .fontWeight(FontWeight.Bold)        .fontColor('"color:#6a9955">#1A1A1A')"color:#6a9955">#6a9955">// 温度大字      Text(this.temperature)        .fontSize(56)        .fontWeight(FontWeight.Bold)        .fontColor('"color:#6a9955">#0A59F7')"color:#6a9955">#6a9955">// 天气描述      Text(this.weather)        .fontSize(20)        .fontColor('"color:#6a9955">#666666')"color:#6a9955">#6a9955">// 刷新按钮      Button(this.isRefreshing ? '刷新中...' : '刷新数据')        .width('60%')        .height(44)        .fontSize(16)        .fontColor('"color:#6a9955">#FFFFFF')        .backgroundColor(this.isRefreshing ? '"color:#6a9955">#999999' : '#0A59F7')        .borderRadius(22)        .enabled(!this.isRefreshing)        .onClick(() => {this.fetchWeatherData();        })    }    .width('100%')    .height('100%')    .justifyContent(ForeignConst.Center)    .alignItems(HorizontalAlign.Center)    .backgroundColor('"color:#6a9955">#F5F5F5')  }}

页面首次加载时 aboutToAppear 生命周期触发数据请求,2 秒后模拟数据返回,三个 @State 变量同时更新,UI 瞬间从「加载中」切换为完整天气信息。点击「刷新数据」按钮会重新触发同一流程,按钮在刷新期间自动禁用并显示「刷新中...」。

应用场景

@State 状态驱动模式适用于:

•表单交互:输入框内容联动验证提示、提交按钮启用/禁用
•列表筛选:切换分类标签后列表内容自动刷新
•实时数据展示:天气、股票、消息推送等需要定时更新的卡片
•多步骤流程:向导页上一步/下一步的进度状态同步

当状态需要在多个组件间共享时,可以进一步使用 @Prop(父子单向传递)、@Link(双向同步)或 AppStorage(全局状态)来扩展。

小结

HarmonyOS 应用开发的核心路径可以概括为三步:用 Stage 模型组织工程结构,用 ArkTS 声明式语法描述 UI,用 @State 装饰器驱动数据到视图的自动同步。掌握了这套「数据变 → UI 变」的心智模型,再加上 DevEco Studio 的实时预览能力(Ctrl+S 保存即刷新),迭代效率会非常高。

下一步可以尝试接入真实的 Network Kit 发起 HTTP 请求,或者用 @Builder 封装可复用的 UI 片段,让代码结构更加清晰。

最新文章

随机文章