在声明式UI编程范式中,UI是应用程序状态的函数,应用程序状态的修改会更新相应的UI界面。ArkUI采用了MVVMMVVM模式作为UI范式,其中ViewModel将数据与视图绑定在一起,更新数据的时候直接更新视图。具体参考,MVVM模式(V1)和MVVM模式(V2)。

ArkUI提供了一系列装饰器实现ViewModel的能力,如@Prop装饰器:父子单向同步、@Link装饰器:父子双向同步、@Provide装饰器和@Consume装饰器:与后代组件双向同步、LocalStorage:页面级UI状态存储等。当自定义组件内变量被装饰器装饰时变为状态变量,状态变量的改变会引起UI的渲染刷新。
具体参考避免不必要的状态变量的使用。
状态变量使用范围不当,可能会带来组件冗余刷新导致的性能问题,具体可参考组件冗余刷新解决方案。
当共享状态的组件间层级相差较大时,会出现状态层层传递的现象。对于状态传递过程中途经的全部组件,都需要增加入参接收该状态再将状态传递给子组件,因此应减少不必要的参数层层传递并按照状态复杂度选择装饰器。
对于AppStorage的使用,由于其作用范围最广,开发者为了方便开发容易将各种状态存入其中以达到共享的目的,这通常会造成大量的性能损失。具体的精细化拆分复杂操作案例请参阅精细化拆分复杂状态。
在多个组件依赖同一数据源时,直接关联数据源会导致每次数据源变化都刷新所有组件。为精准控制组件刷新,可采取以下策略: