鸿蒙中状态管理v1和v2
ArkUI状态管理的主要职责是:负责将可观察数据的变化自动同步到UI界面,实现数据驱动的UI刷新,使开发者能更加够专注于UI界面的实现和设计。
一.概述
ArkUI状态管理的主要职责是:负责将可观察数据的变化自动同步到UI界面,实现数据驱动的UI刷新,使开发者能更加够专注于UI界面的实现和设计。
二.基本区别
V1强调组件层级的状态管理,而V2则增强了对数据对象的深度观察与管理能力,不再局限于组件层级。通过V2,开发者能够更灵活地控制数据和状态,实现更高效的UI刷新。具体V1和V2的区别可以参见状态管理概述。
三.如何使用
最常见的有@State,@Link,@Prop等,但是v2中这些装饰器都改变。
- V2是V1的增强版本,为开发者提供更多功能和灵活性。
- 对于新开发的应用,建议直接使用V2版本范式来进行开发。
- 对于已经使用V1的应用,如果V1的功能和性能已能满足需求,则不必立即切换到V2。如果开发者在开发过程中受限于V1不能深度观察等特性,则建议开发者尽早规划向V2的迁移,以便未来实现平滑过渡和改进。
- 对于需要在现阶段混用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持久化能力可独立使用。 |
更多推荐



所有评论(0)