HarmonyOS 鸿蒙Next 被@StorageProp修饰的应用全局状态变量的改变是否只改变跟它相关的UI组件?

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

HarmonyOS 鸿蒙Next 被@StorageProp修饰的应用全局状态变量的改变是否只改变跟它相关的UI组件?

如题

比如我在判断用户是否登录时,设置了全局状态变量isLogin。 AppStorage.setOrCreate(‘isLogin’, true);

如果我在其他地方用此变量来判断用户是否登录 

@StorageProp(‘isLogin’) isLogin: boolean = false;

当此变量isLogin被全局更改时,我知道相关的ui组件会更改。但是我有个问题,就是跟isLogin的函数调用、路由跳转是否也会执行?比如,当用户点击某个tab时,会跳转至下个页面,但是前提是isLogin=true。自定义组件的方法,比如aboutToAppear、aboutToDisappear、onPageShow等,如果有isLogin相关判断呢,是否也会重新执行?


更多关于HarmonyOS 鸿蒙Next 被@StorageProp修饰的应用全局状态变量的改变是否只改变跟它相关的UI组件?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

不能重新执行,只触发重新渲染,如果要重新执行的话必须有绑定方法,通过[@Watch](/user/Watch) 来绑定一个方法,参考:

AppStorage.setOrCreate('PropA', false);

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
[@StorageProp](/user/StorageProp)('PropA') [@Watch](/user/Watch)('onChange') propA: boolean = false;

onChange() {
console.log(`propA change`);
}

aboutToAppear(): void {
this.propA = true;
}

build() {
Column() {
Text(`${this.propA}`)
Button('change')
.onClick(() => {
AppStorage.setOrCreate('PropA', false);
console.log(`PropA: ${this.propA}`);
})
}
}
}

更多关于HarmonyOS 鸿蒙Next 被@StorageProp修饰的应用全局状态变量的改变是否只改变跟它相关的UI组件?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,被@StorageProp修饰的应用全局状态变量的改变,其行为并非仅仅局限于改变与该变量直接相关的UI组件。@StorageProp通常用于标记组件的状态属性,这些属性在全局状态管理系统中被追踪。当这些状态变量发生变更时,系统会触发相应的状态更新机制。

这一机制会遍历所有依赖该状态变量的UI组件,并重新渲染这些组件以反映最新的状态。因此,改变被@StorageProp修饰的全局状态变量,不仅影响直接与该变量绑定的UI组件,还可能间接影响到通过其他逻辑或数据绑定与该变量有关联的其他UI组件。

这种设计旨在提高应用的响应性和一致性,确保用户界面能够实时反映应用状态的变化。然而,开发者需要谨慎管理全局状态,以避免不必要的渲染开销和潜在的性能问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部