HarmonyOS鸿蒙Next第10篇:状态管理V1全面迁移至V2
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
HarmonyOS鸿蒙Next中,状态管理从V1迁移至V2主要涉及以下几个关键点:
-
架构变化:V2状态管理采用了更简洁的架构,减少了冗余代码,提升了性能。V1中的状态管理依赖于多个模块的协同工作,而V2通过引入新的状态管理机制,简化了状态管理的流程。
-
API更新:V2状态管理提供了新的API接口,这些接口更加直观和易用。开发者可以通过新的API更高效地管理应用状态,减少了代码的复杂性。
-
状态共享:V2状态管理增强了状态共享的能力,支持跨组件、跨页面的状态共享。V1中状态共享需要通过复杂的传递机制,而V2通过引入全局状态管理,简化了这一过程。
-
性能优化:V2状态管理在性能上进行了优化,减少了状态更新时的开销。V1中状态更新可能会导致不必要的重新渲染,而V2通过更智能的状态更新机制,减少了这种情况的发生。
-
兼容性:V2状态管理在设计时考虑了与V1的兼容性,开发者可以逐步迁移,无需一次性重写所有代码。V1中的状态管理代码可以在V2中继续使用,但建议逐步迁移以充分利用V2的新特性。
-
工具支持: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的新特性重构代码,以充分发挥其优势。