HormonyOS--状态管理

状态管理基本概念

我们想要制作不是一个静态无法操作的页面,而是能够实现用户与界面交互的动态变更,我们就要引入状态这个概念。

假设一个买菜软件下的,点击一下加按钮,旁边的数字就会加1,如果该变量不是状态变量,就算该变量改变了,UI界面也是不会改变的,要达到UI界面实时的更新,就要使它成为状态变量。

鸿蒙使用装饰器来完成这一操作,被装饰的变量就可以成为状态变量,当数值改变时,就会引起UI界面的重新刷新,实现实时更新。

此外,鸿蒙提供了不同的装饰器可以使得状态变量能够在组件内,父子组件,子孙组件以及跨组件进行状态的更新

MVVM模式

在大项目中,Model负责从API或者网络上,数据库去获取原始数据,定义ViewModel去获取原始数据,并加以处理,还提供业务逻辑,在View上就直接使用ViewModel的方法获取数据,然后进行渲染。

下面是MVVM模式的一个实例

// ViewModel classes
let nextId = 0;

@Observed
export class ObservedArray<T> extends Array<T> {
   
  constructor(args: T[]) {
   
    console.log(`ObservedArray: ${
     JSON.stringify(args)} `)
    if (args instanceof Array) {
   
      super(...args);
    } else {
   
      super(args)
    }
  }
}

@Observed
export class Address {
   
  street: string;
  zip: number;
  city: string;

  constructor(street: string,
              zip: number,
              city: string) {
   
    this.street = street;
    this.zip = zip;
    this.city = city;
  }
}

@Observed
export class Person {
   
  id_: string;
  name: string;
  address: Address;
  phones: ObservedArray<string>;

  constructor(name: string,
              street: string,
              zip: number,
              city: string,
              phones: string[]) {
   
    this.id_ = `${
     nextId}`;
    nextId++;
    this.name = name;
    this.address = new Address(street, zip, city);
    this.phones = new ObservedArray<string>(phones);
  }
}

export class AddressBook {
   
  me: Person;
  contacts: ObservedArray<Person>;

  constructor(me: Person, contacts: Person[]) {
   
    this.me = me;
    this.contacts = new ObservedArray<Person>(contacts);
  }
}

// 渲染出Person对象的名称和Observed数组<string>中的第一个号码
// 为了更新电话
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值