HarmonyOS鸿蒙Next第10篇:状态管理V1全面迁移至V2

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS鸿蒙Next第10篇:状态管理V1全面迁移至V2 【上架应用开源版】第10篇:状态管理V1全面迁移至V2

V2是必须的呀!因此把v1前面升级至v2了,欢迎围观不同的写法~

1. 迁移内容太多,还是得看官方文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-v1-v2-migration-V5

完整项目已经上传到gitee了,如果看项目前后的变化,建议开两个工程,把变化前后的版本(git log)下载下来。

2. 这里来点不一样的写法

2.1 全局变量统一管理

//构建全局对象
import { AppStorageV2 } from '@kit.ArkUI';

@ObservedV2
export class V2Info {
  @Trace isLogin: boolean = false; //登录状态
  @Trace statusHeight: number = 0; //状态栏高度(单位:vp)
  @Trace bottomHeight: number = 0; //导航栏高度(单位:vp)
  @Trace screenHeight: number = 0; //屏幕高度(单位:vp)
  @Trace screenWidth: number = 0; //屏幕宽度(单位:vp)

  /**
   * 获取最新的对象
   */
  static connect(): V2Info {
    return AppStorageV2.connect<V2Info>(V2Info, () => new V2Info())!;
  }
}

//监听对象1
@ComponentV2
struct HomePage {
    @Local info: V2Info = V2Info.connect();
    ...

//监听对象2
@ComponentV2
struct LoginPage {
    @Local info: V2Info = V2Info.connect();
    ...

//对象复制并通知
V2Info.connect().isLogin = true;

是不是很简单啊

2.2 监听并初始化

//工具类:
/*
 * @Desc: 全局内存对象缓存工具类,比如:保存 Function 、Context等
 * @Author: qincji
 * @Date: 2024/5/25
 */
import { systemDateTime } from '@kit.BasicServicesKit';
import { log } from './Log';

const TAG = 'Global';

class Global {
    ...

/**
 * 配合@Local 用户单个状态发生改变时进行全局通知
 */
public statusChange<T>(key: string, defValue: T, onChange: (value: T) => void): T {
    this.setObject(key + '-fn', onChange); //添加监听
    return this.getObjectDef(key, defValue);
}

/**
 * 状态发生变化了进行通知
 */
public statusNotify(key: string, value: Object) {
    const fn: Function = this.getObject(key + '-fn');
    if (fn === undefined) { //存的和取的不匹配
        return;
    }
    this.setObject(key, value); //保存起来
    fn(value); //进行通知-单点
}
}

export let global = new Global()


//监听
  @Local splashFinish: boolean = global.statusChange('splashFinish', false, (value) => {
    this.splashFinish = value
    global.removeObject('splashFinish'); //移除掉
})

//通知
global.statusNotify('splashFinish', true);

再扩展一下,操作性还是挺强的

完整代码已托管至鸿蒙应用0-1开发。欢迎Star & Fork!


更多关于HarmonyOS鸿蒙Next第10篇:状态管理V1全面迁移至V2的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙Next中,状态管理从V1迁移至V2主要涉及以下几个关键点:

  1. 架构变化:V2状态管理采用了更简洁的架构,减少了冗余代码,提升了性能。V1中的状态管理依赖于多个模块的协同工作,而V2通过引入新的状态管理机制,简化了状态管理的流程。

  2. API更新:V2状态管理提供了新的API接口,这些接口更加直观和易用。开发者可以通过新的API更高效地管理应用状态,减少了代码的复杂性。

  3. 状态共享:V2状态管理增强了状态共享的能力,支持跨组件、跨页面的状态共享。V1中状态共享需要通过复杂的传递机制,而V2通过引入全局状态管理,简化了这一过程。

  4. 性能优化:V2状态管理在性能上进行了优化,减少了状态更新时的开销。V1中状态更新可能会导致不必要的重新渲染,而V2通过更智能的状态更新机制,减少了这种情况的发生。

  5. 兼容性:V2状态管理在设计时考虑了与V1的兼容性,开发者可以逐步迁移,无需一次性重写所有代码。V1中的状态管理代码可以在V2中继续使用,但建议逐步迁移以充分利用V2的新特性。

  6. 工具支持:V2状态管理提供了更好的工具支持,开发者可以通过工具更直观地查看和管理应用状态。V1中的工具支持相对有限,而V2通过增强工具功能,提升了开发效率。

迁移至V2状态管理后,开发者可以更高效地管理应用状态,提升应用性能和开发体验。

更多关于HarmonyOS鸿蒙Next第10篇:状态管理V1全面迁移至V2的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next的状态管理从V1迁移至V2,主要引入了更灵活的状态管理机制。V2版本支持更细粒度的状态更新,减少了不必要的渲染,提升了性能。开发者可以通过@State@Prop@Link等装饰器更高效地管理组件状态。此外,V2还优化了状态共享和跨组件通信,简化了复杂应用的状态管理逻辑。迁移时,建议逐步替换V1的API,并利用V2的新特性重构代码,以充分发挥其优势。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!