Harmony 状态管理神器 @ObservedV2

简介: Harmony 状态管理神器 @ObservedV2

Harmony 状态管理神器 @ObservedV2

背景

最近Harmony 应用开发技术中推出了新版的状态管理技术,试用过后,直呼很香。我们来看为什么?

因为在 Harmony 应用开发过程中,我们一定会碰到监听嵌套类/深层次属性的需求,如希望 sonweight属性变化后,可以引起UI刷新。

@Observed装饰器和 @ObjectLink装饰器

针对以上需求,那之前,也就是所谓的 v1 版本是怎么做的呢? 是通过 @Observed装饰器和**@ObjectLink**装饰器实现的。

其中,这一套解决方案有一个很严重的、破坏性的问题- 必须搭配自定义组件一起使用。

BY}6OW5Z[5%758T$XBX}{JN.png

所以,你代码本来是这样子的🤓:

1Z)TK@%%7)[6_L4PN{R)FP1.png

为了实现深层次数据的监听,必须改造-破坏你的UI结构,要引入自定义组件,那么就变成了这样子😭:

[[2T%@B9JDR)1F@B46$BDYN.png


大家看看,这个代码的风格,是人干的事情吗

接下来,我们看看更新后的技术解决方案是怎么样的 👇👇👇👇

@ObservedV2装饰器和@Trace装饰器

截至 2024年7月15日 v2都是试用版

介绍

为了增强状态管理框架对类对象中属性的观测能力,开发者可以使用**@ObservedV2**装饰器和@Trace装饰器装饰类以及类中的属性。

其中,官网上的表达如下:

  • @ObservedV2装饰器与 @Trace 装饰器需要配合使用,单独使用 @ObservedV2装饰器 @Trace 装饰器没有任何作用。
  • @Trace装饰器装饰的属性property变化时,仅会通知property关联的组件进行刷新。
  • 在嵌套类中,嵌套类中的属性property@Trace装饰且嵌套类被 @ObservedV2 装饰时,才具有触发UI刷新的能力。
  • 在继承类中,父类或子类中的属性property@Trace 装饰且该property所在类被 @ObservedV2 装饰时,才具有触发UI刷新的能力。
  • 未被 @Trace 装饰的属性用在UI中无法感知到变化,也无法触发UI刷新。
  • @ObservedV2 的类实例目前不支持使用JSON.stringify进行序列化。

我们针对以上总结一下。使用的技巧也很简单

  1. 要监听的属性要添加 @Trace 装饰器
  2. 被监听的属性 所在的类要添加 @ObservedV2
  3. 继承类 ,继承其中的被监听的属性时,可以等价视为是给出自己的类添加了 @Trace 装饰器监听。


是不要对比 @Observed装饰器和 @ObjectLink 要简单轻松多了?

总结

  1. 当我们在开发中,如果碰到了监听深层次属性的需求,可以使用 @Observed装饰器和 @ObjectLink装饰器 和 @ObservedV2装饰器和 @Trace装饰器
  2. @Observed装饰器和 @ObjectLink装饰器 是比较稳定的技术,但是开发效率低,体验不好,对代码具有入侵型
  3. @ObservedV2装饰器和 @Trace 装饰器是新推出的v2的版本,目前还在试用期,大概率会成为稳定版。对代码比较友好,如果是新的业务,可以优先考虑使用它。
目录
相关文章
|
1天前
|
存储 数据管理 API
Harmony状态管理AppStorageV2和PersistenceV2
Harmony状态管理AppStorageV2和PersistenceV2
12 0
Harmony状态管理AppStorageV2和PersistenceV2
|
2月前
|
开发工具 Windows
Electron V8排查问题之构建 Electron 源码时遇到 dugite 下载失败如何解决
Electron V8排查问题之构建 Electron 源码时遇到 dugite 下载失败如何解决
29 0
|
3月前
|
API 开发者 运维
开发与运维命令问题之Gorilla-CLI提升命令行交互体验如何解决
开发与运维命令问题之Gorilla-CLI提升命令行交互体验如何解决
19 0
|
5月前
|
Web App开发 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
515 0
|
存储 缓存 API
CocosCreator3.8研究笔记(十四)CocosCreator 资源管理Asset Manager
CocosCreator3.8研究笔记(十四)CocosCreator 资源管理Asset Manager
391 0
|
前端开发 C++
前端hook项目moblie总结笔记-打包apk过程
前端hook项目moblie总结笔记-打包apk过程
95 0
前端hook项目moblie总结笔记-打包apk过程
|
开发工具 iOS开发 git
iOS 开发 - 亲身经历告诉你如何把自己的库通过pod导入(详细步骤)
iOS 开发 - 亲身经历告诉你如何把自己的库通过pod导入(详细步骤)
311 0
iOS 开发 - 亲身经历告诉你如何把自己的库通过pod导入(详细步骤)
|
存储 Oracle Ubuntu
一个在线安卓项目移植阿里云记录
将一个安卓书店项目移植到阿里云上
一个在线安卓项目移植阿里云记录
|
Android开发 iOS开发
聊一聊在Airtest自动化中如何清除iOS后台应用
聊一聊在Airtest自动化中如何清除iOS后台应用
488 0
|
Rust 资源调度 JavaScript
桌面端开发(Tauri)开启第一篇
桌面端开发(Tauri)开启第一篇
1209 0
桌面端开发(Tauri)开启第一篇