HarmonyOS --@state状态装饰器

在声明式UI中,是以状态驱动视图更新。


状态(state):指驱动视图更新的数据(被装饰器标记的变量)。
试图(view):基于UI描述渲染得到用户界面

  1. @State装饰器标记的变量必须初始化,不能为空值
  2. @State支持Object、class、string、number、boolean、enum类型以及这些类型的数据。
  3. 嵌套类型以及数组中的对象属性无法触发视图更新。

举例

@Entry  
@Component  
struct Index {  
  @State message1: string = 'Harmony'  
  @State message2: string = '遥遥领先!'  
  @State imageWidth : number = 200  
  build() {  
    Row() {  
      Column() {  
        Text(this.message1)  
          .onClick(()=>{  
            this.message1 = "hello "  
          })  
      }  
    }  
    .height('100%')  
  }  

点击文字之后,Harmony变成hello文字。

改变一个对象的状态

首先我们需要声明一个对象

// 声明一个内部类Person
class Person{  
  name:string  
  age:number  
  // 构造函数
  constructor(name:string,age:number) {  
    this.name = name  
    this.age = age  
  }  
}

// @Entry …………

// 创建一个状态修饰的对象  
  @State p:Person = new Person('Whz',21)

然后在屏幕上渲染出来

Text(`${this.p.name}:${this.p.age}`)  
  .fontSize(60)  
  .onClick(() => {  
    this.p.age++  
  })


然后点击文本,年龄数值会增加1

按钮控制列表元素

import router from '@ohos.router'  
import {Header} from '../components/herder'  
// 声明一个内部类Item  
class Person{  
  name:string  
  age:number  
  
  constructor(name:string,age:number) {  
    this.name = name  
    this.age = age  
  }  
}  
@Entry  
@Component  
struct Index {  
  idx:number = 1  
  @State message1: string = 'Harmony'  
  @State message2: string = '遥遥领先!'  
  @State imageWidth: number = 200  
  
// 创建一个状态修饰的对象  
  @State p:Person = new Person('Ramos',21)  
  // 创建一个数组  
  @State list:Person[] = [  
    new Person('Rose',20),  
    new Person('White',19)  
  ]  
  build() {  
    Row() {  
      Column() {  
        Header({ title: 'Hello World' })  
        Image($r('app.media.image'))  
          .width(this.imageWidth)  
          .height(200)  
          .borderRadius(20)  
        Text(`${this.p.name}:${this.p.age}`)  
          .fontSize(60)  
          .onClick(() => {  
            this.p.age++  
          })  
          // 增加按钮逻辑
        Button('增加').onClick((event: ClickEvent) => {  
          this.list.push(new Person('人名'+ this.idx++,19))  
        })  
        ForEach(this.list,(p,index)=>{  
          Row(){  
          Text(`list中:${p.name},${p.age}`)  
          // 删除按钮逻辑
          Button('删除')  
            .onClick(()=>{  
              this.list.splice(index,1)  
            })  
            }  
          .width('90%')  
          .justifyContent(FlexAlign.SpaceAround)  
        })  
      }  
      .height('100%')  
    }  
  }}

 

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值