一.概述

ArkUI状态管理的主要职责是:负责将可观察数据的变化自动同步到UI界面,实现数据驱动的UI刷新,使开发者能更加够专注于UI界面的实现和设计。

二.基本区别

V1强调组件层级的状态管理,而V2则增强了对数据对象的深度观察与管理能力,不再局限于组件层级。通过V2,开发者能够更灵活地控制数据和状态,实现更高效的UI刷新。具体V1和V2的区别可以参见状态管理概述

三.如何使用

最常见的有@State,@Link,@Prop等,但是v2中这些装饰器都改变。

  1. V2是V1的增强版本,为开发者提供更多功能和灵活性。
  2. 对于新开发的应用,建议直接使用V2版本范式来进行开发。
  3. 对于已经使用V1的应用,如果V1的功能和性能已能满足需求,则不必立即切换到V2。如果开发者在开发过程中受限于V1不能深度观察等特性,则建议开发者尽早规划向V2的迁移,以便未来实现平滑过渡和改进。
  4. 对于需要在现阶段混用V1和V2的场景,请参阅混用文档。编译器、工具链、IDE对某些不推荐的误用和混用场景会进行校验,虽然开发者可能可以通过特殊手段绕过这些校验,但还是强烈建议开发者遵循混用文档的指导,避免因双重代理等问题给应用带来不确定性。

切记v1中不能使用v2,否则报错

四.v1和v2能力对比

V1装饰器名 V2装饰器名 说明
@Observed @ObservedV2

表明当前对象为可观察对象。但两者能力并不相同。

@Observed可观察第一层的属性,需要搭配@ObjectLink使用才能生效。

@ObservedV2本身无观察能力,仅代表当前class可被观察,如果要观察其属性,需要搭配@Trace使用。

@Track @Trace

V1装饰器@Track为精确观察,不使用则无法做到类属性的精准观察。

V2@Trace装饰的属性可以被精确跟踪观察。

@Component @ComponentV2

@Component为搭配V1状态变量使用的自定义组件装饰器。

@ComponentV2为搭配V2状态变量使用的自定义组件装饰器。

@State

无外部初始化:@Local

外部初始化一次:@Param@Once

@State和@Local类似都是数据源的概念,在不需要外部传入初始化时,可直接迁移。如果需要外部传入初始化,则可以迁移为@Param@Once,详情见@State->@Local
@Prop @Param @Prop和@Param类似都是自定义组件参数的概念。当输入参数为复杂类型时,@Prop为深拷贝,@Param为引用。
@Link @Param@Event @Link是框架自己封装实现的双向同步,对于V2开发者可以通过@Param@Event自己实现双向同步。
@ObjectLink @Param 直接兼容,@ObjectLink需要被@Observed装饰的class的实例初始化,@Param没有此限制。
@Provide @Provider 兼容。
@Consume @Consumer 兼容。
@Watch @Monitor

@Watch用于监听V1状态变量的变化,具有监听状态变量本身和其第一层属性变化的能力。状态变量可观察到的变化会触发其@Watch监听事件。

@Monitor用于监听V2状态变量的变化,搭配@Trace使用,可有深层监听的能力。状态变量在一次事件中多次变化时,仅会以最终的结果判断是否触发@Monitor监听事件。

LocalStorage 全局@ObservedV2@Trace 兼容。
AppStorage AppStorageV2 兼容。
Environment 调用Ability接口获取系统环境变量 Environment获取环境变量能力和AppStorage耦合。在V2中可直接调用Ability接口获取系统环境变量。
PersistentStorage PersistenceV2 PersistentStorage持久化能力和AppStorage耦合,PersistenceV2持久化能力可独立使用。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐