状态管理概述

2024-11-09 22:30:23
13次阅读
0个评论

状态管理概述

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

在状态管理框架的演进过程中,先后推出了状态管理V1和V2两个版本。V1强调组件层级的状态管理,而V2则增强了对数据对象的深度观察与管理能力,不再局限于组件层级。通过V2,开发者能够更灵活地控制数据和状态,实现更高效的UI刷新。

状态管理(V2)装饰器总览

状态管理(V2)提供了一套全新的装饰器。

  • [@ObservedV2](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-observedV2-and-trace.md):@ObservedV2装饰器装饰class,使得被装饰的class具有深度监听的能力。@ObservedV2和@Trace配合使用可以使class中的属性具有深度观测的能力。
  • [@Trace](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-observedV2-and-trace.md):@Trace装饰器装饰被@ObservedV2装饰的class中的属性,被装饰的属性具有深度观测的能力。
  • [@ComponentV2](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-componentV2.md):使用@ComponentV2装饰的struct中能使用新的装饰器。例如:@Local、@Param、@Event、@Once、@Monitor、@Provider、@Consumer。
  • [@Local](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-local.md):@Local装饰的变量为组件内部状态,无法从外部初始化。
  • [@Param](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-param.md):@Param装饰的变量作为组件的输入,可以接受从外部传入初始化并同步。
  • [@Once](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-once.md):@Once装饰的变量仅初始化时同步一次,需要与@Param一起使用。
  • [@Event](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-event.md):@Event装饰方法类型,作为组件输出,可以通过该方法影响父组件中变量。
  • [@Monitor](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-monitor.md):@Monitor装饰器用于@ComponentV2装饰的自定义组件或@ObservedV2装饰的类中,能够对状态变量进行深度监听。
  • @Provider和@Consumer:用于跨组件层级双向同步。
  • [@Computed](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-new-Computed.md):计算属性,在被计算的值变化的时候,只会计算一次。主要应用于解决UI多次重用该属性从而重复计算导致的性能问题。
  • !!语法:双向绑定语法糖。

状态管理(V2)优点

为了增强状态管理V1版本的部分能力,例如深度观察、属性级更新等,ArkUI推出状态管理V2供开发者使用。

状态管理V2将观察能力增强到数据本身,数据本身就是可观察的,更改数据会触发相应的视图的更新。相较于状态管理V1,状态管理V2有如下优点:

  • 状态变量独立于UI,更改数据会触发相应视图的更新。
  • 支持对象的深度观测和深度监听,且深度观测机制不影响观测性能。
  • 支持对象中属性级精准更新及数组中元素的最小化更新。
  • 装饰器易用性高、拓展性强,在组件中明确输入与输出,有利于组件化。

状态管理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类似都是数据源的概念,区别是@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持久化能力可独立使用。

V2使用指引

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

参考

备注

作者:夏天

链接:https://www.nutpi.net/

出处:https://www.arkui.club/

来源:坚果派

著作权归作者所有,禁止任何未经授权的个人或组织以任何形式将本案例集及其附属资料、创新、创意、架构设计、算法、衍生作品等用于任何商业目的、盈利活动、各类竞赛(比赛)、直播教学、录播教学、线下课程、书籍编写、教材编写、会议、培训、公益活动、项目课题、毕业设计、毕业论文、学术论文等。商业转载请联系作者获得授权,非商业转载请注明出处。否则追究相关责任。

收藏00

登录 后评论。没有帐号? 注册 一个。