鸿蒙状态管理

我们开发中构建的页面多为静态页面。如果希望构建一个动态的,有交互的界面,就需要引入‘状态’的概念

用户构建了一个UI模型,其中应用的运行时的状态是参数,当参数改变时,UI作为返回结果,也将进行对应的改变。状态变化带来UI的重新渲染。

自定义组件拥有变量所谓属性,必须被装饰器修饰才可以成为状态变量,状态变量的改变会引起UI的渲染刷新,如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。

State状态:驱动UI更新的数据,用户通过触发组件的事件方法,改变状态数据。状态数据的改变,引起UI的重新渲染,只能在@component装饰修饰的组件中使用

常规变量:没有被状态装饰器修饰的变量,通常应用于辅助计算。它的改变不会引起UI的刷新。

数据源/同步源:状态变量的原始来源,可以同步给不同的状态数据,通常意义为父组件传给子组件的数据,以下示例中数据源为count:1

命名参数机制:父组件通过指定参数传递给子组件的状态变量,为父子传递同步参数的主要手段。示例CompA({aProp:this.aProp})

从父组件初始化,父组件使用命名参数机制,将指定参数传递给子组件。子组件初始化的默认值在有父组件传值的情况下,会被覆盖

@Component
struct MyComponent {
  @State count: number = 0;
  private increaseBy: number = 1;

  build() {
  }
}

@Component
struct Parent {
  build() {
    Column() {
      // 从父组件初始化,覆盖本地定义的默认值
      MyComponent({ count: 1, increaseBy: 2 })
    }
  }
}

装饰器总览

ArkUI状态管理提供了多种装饰器,通过使用这些装饰器,状态变量不仅可以观察在组件内的改变,还可以在不同组件层级间传递(也就是在挂载View里面的传值),比如父子组件(单页面挂载的子视图),跨组件(跨页面,比如push)层级,也可以观察全局范围内的变化(比如AppStorage修饰的)。根据状态变量的影响范围,将所有的装饰器可以大致分为
1.组件级别的状态管理,可以观察组件内变化,和不同组件层级的变化,但需要同一个页面内

2.可以观察不同页面,甚至不同UIAbility的状态变化。是应用内全局的状态管理

从数据传递的同步类型层面可以分为

1.只读的单项传递
2.可变更的双向传递

在这里插入图片描述

上图,Component为组件级别的状态管理,单页面内的
Application为应用管理的状态管理。
开发者可以通过@StorageLimk实现应用状态的双向同步
可以通过@LocalStorageLikn实现单页面组件状态的双向同步
可以通过@StorageProp实现应用的单向同步
可以通过@LocalStorageProp实现单页面组件状态的单向同步

管理组件拥有的状态,即图中Components级别的状态管理

@state:@State装饰的变量拥有其所属组件的状态,可以作为其子组件单向和双向同步的数据源,当其数值改变时,会引起相关组件的渲染刷新

@state装饰的变量与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link,@ObjectLink装饰变量之间建立双向数据同步

@State装饰的变量生命周期与其所属自定义的生命周期相同

@Prop:@Prop装饰的变量可以和父组件建立单向同步关系,@Prop装饰的变量时可变的,但修改不会同步回父组件

@Link:@Link装饰的变量可以和父组件建立双向同步关系,子组件中@Link装饰变量的修改会同步给父组件中,建立双向数据绑定的数据源,父组件的更新也会同步给@Link装饰的变量

@P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值