基础概念
应用程序包
- HAP 是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包,HAP分为Entry和Feature两种类型。
- HAR 是静态共享包,可以包含代码、C++库、资源和配置文件。只能作为应用模块的依赖项被引用。个人理解与Web前端开发中NPM包一个概念。
- HSP 是动态共享包,可包含代码、C++库、资源和配置文件,通过HSP可以实现代码和资源的共享。不支持独立发布,而是跟随宿主应用的APP包一起发布。
应用配置文件(Stage模型)
每个应用项目的代码目录下必须包含应用配置文件,这些配置文件会向编译工具、操作系统和应用市场提供应用的基本信息。基于Stage模型的应用项目代码下,都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。
app.json5配置文件主要包含以下内容:
- 应用的全局配置信息,包含应用的Bundle名称、开发厂商、版本号等基本信息。
- 特定设备类型的配置信息。
module.json5配置文件主要包含以下内容:
- Module的基本配置信息,包含Module名称、类型、描述、支持的设备类型等基本信息。
- 应用组件信息,包含UIAbility组件和ExtensionAbility组件的描述信息。
- 应用运行过程中所需的权限信息。
目录结构(Stage模型)
ArkTS
ArkTS是面向于HarmonyOS应用开发的官方高级语言,ArkTS在TypeScript生态基础上做了进一步扩展,是它的超集。
ArkTS提供了一些基础类库,例如XML的生成解析转换,高精度浮点运算等能力。
在ArkUI开发框架中,ArkTS主要扩展了如下能力↓
基本语法
- 装饰器:开发常见装饰器:@Entry、@Component、@State、@Prop、@Link、@Preview等
- UI描述:以声明式的方法来描述UI的结构,例如build()方法中的代码块
- 自定义组件:可复用的UI单元,可组合其他组件,如上面被@Component装饰的struct Hello。
- 系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者使用,例如上图中的Column、Text、Divider、Button等。更多系统组件见:developer.huawei.com/consumer/cn…
- 属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()等。
- 事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。
状态管理
状态是为了构建出一个动态的、可交互的界面,鸿蒙官方提供了两种状态管理方案,状态管理V1和状态管理V2
状态管理(V1)
@State 装饰的变量称为状态变量,在状态变量中@State是最基础的,是变量拥有状态属性的装饰器。但并不是状态变量的所有更改都会引起UI的刷新,只有可以被框架观察到的修改才会引起UI刷新。可以理解为非基本类型的深层改动无法被观察到,例如对象的深层属性更改。
@Prop 装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。
@Link 子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。
@Provide和@Consume 用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于父子组件之间通过参数传递的机制,用于跨组件层级传递。
@Observed和@ObjectLink 上面所说的装饰器只能观察到第一层的变化,实际中对于二维数组、对象的属性是对象,他们的第二层属性变化是无法观察到的,这就引出了@Observed/@ObjectLink装饰器。
上面是组件级的状态管理,下面是应用级的状态管理
- LocalStorage
- AppStorage
- PersistentStorage
- Environment
状态管理(V2)
官方推荐,比V1使用更便捷,代码复杂度大大降低。
@ObservedV2和@Trace 前者用来装饰class,后者用来装饰class中需要精确追踪状态的属性。
@ComponentV2 在自定义组件中使用,用来使用V2状态管理的能力。
@Local 类似于@State,用来定义组件内部状态,State可以外部传入初始化,Local无法外部传入初始化,具体见官方文档。
@Param 同@Prop,都是自定义组件参数的概念,当输入参数为复杂类型时,@Prop为深拷贝,@Param为引用,具体见官方文档。
@Once 装饰器只能和@Param一起使用,变量仅初始化一次,同@Local,区别在于相较于@Local能接受外部传入初始化。
@Event 用来实现子组件更新@Param的能力。
@Provider和@Consumer 跨组件数据传递,provider为数据提供方,consumer为数据消费方。
条件渲染
在build()和@Builder装饰器中,除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建
- if/else条件渲染
- ForEach循环渲染
ArkUI
| 开发范式 | 语言生态 | UI更新方式 | 适用场景 | 使用人群 |
|---|---|---|---|---|
| 声明式开发范式 | ArkTS语言 | 数据驱动更新 | 复杂度较大、团队合作度较高的程序 | 移动、系统应用开发 |
| 类Web开发范式 | JS语言 | 数据驱动更新 | 界面较为简单的程序应用和卡片 | Web前端开发人员 |
导航和路由
- 页面路由(@ohos.router)不推荐
- 组件导航(Navigation)推荐