HarmonyOS Next初探

184 阅读5分钟

基础概念

应用程序包

  • 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模型)

image.png

ArkTS

ArkTS是面向于HarmonyOS应用开发的官方高级语言,ArkTS在TypeScript生态基础上做了进一步扩展,是它的超集。

ArkTS提供了一些基础类库,例如XML的生成解析转换,高精度浮点运算等能力。

在ArkUI开发框架中,ArkTS主要扩展了如下能力↓

基本语法

0000000000011111111.20241220151943.83692057794167952264505654720844.png

  • 装饰器:开发常见装饰器:@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)推荐