一、MVVM
ArkUI提供了一系列装饰器实现ViewModel的能力,如@Prop、@Link、@Provide、LocalStorage等。当自定义组件内变量被装饰器装饰时变为状态变量,状态变量的改变会引起UI的渲染刷新。
在ArkUI的开发过程中,如果没有选择合适的装饰器或合理的控制状态更新范围,可能会导致以下问题:
1. 状态和UI的不一致,如同一状态的界面元素展示的UI不同,或UI界面展示的不是最新的状态。
2. 非必要的UI视图刷新,如只修改局部组件状态时导致组件所在页面的整体刷新。
当用户与界面产生交互行为时,状态的修改是通过事件驱动处理的。事件的处理可以在应用的任何地方,如果没有进行适当的逻辑处理管理也会导致代码冗余和不利于维护。
二、状态变量装饰器的使用
1、没有关联任何UI组件的状态变量和没有修改过的状态变量不应该定义为状态变量,直接使用一般变量即可,否则会影响性能。
2、状态变量要经过很多次计算的时候,用中间变量来存储它,减少不必要的行为而导致性能的消耗。 例如
@State message: string = '';
appendMsg(newMsg: string) {
this.message += newMsg;
this.message += ';';
this.message += '<br/>';
}
改为
@State message: string = '';
appendMsg(newMsg: string) {
let message = this.message;
message += newMsg;
message += ';';
message += '<br/>';
this.message = message;
}
三、组件中的状态共享
有两种
1、第一种就是组件内独享的状态,状态的定义和更新都是在组件内,组件销毁,状态也随之消失。组件内独享的状态使用@State装饰器。
2、第二种就是组件间需要共享状态。这里组件之间有3种关系,父子关系;同祖先组件关系;完全没有关系的两个组件;