HarmonyOS | 状态管理(一) | @State装饰器



前言

随着鸿蒙技术的普及,我们是时候学习鸿蒙开发了,本篇讲解状态管理的@State装饰器(组件内状态)


一、@State 是什么?

@State装饰的变量,与声明式范式中的其他被装饰变量一样,是私有的,只能从组件内部访问,在声明时必须指定其类型和本地初始化。初始化也可选择使用命名参数机制从父组件完成初始化。

@State装饰的变量拥有以下特点:
@State装饰的变量与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link、@ObjectLink装饰变 量之间建立双向数据同步。
@State装饰的变量生命周期与其所属自定义组件的生命周期相同。

二、使用场景

装饰简单类型的变量

@Entry
@Component
struct MyComponent {
  @State count: number = 0;

  build() {
    Button(`click times: ${this.count}`)
      .onClick(() => {
        this.count += 1;
      })
  }
}

装饰class对象类型的变量

class Model{
    public value:String

    constructor(value:String) {
        this.value = value
    }

}

@Entry
@Component
struct States {
   build(){
       Column(){
          MyComponent({count:1,increaseBy:2}).width(300)
          MyComponent({title:new Model(`Hello World 2`),count:7})
       }
   }
}

@Component
struct MyComponent {
   @State title:Model = new Model(`Hello World`)
   @State count:number = 0;
   private increaseBy:number = 1;

   build(){
      Column(){
         Text(`${this.title.value}`).margin(10)

         Button(`Click to change title`).onClick(()=>{
             this.title.value = this.title.value === `Hello ArkUI` ? `Hello World`:`Hello ArkUI`;
         })
         .width(300)
         .margin(10)

         Button(`Click to increase count = ${this.count}`)
            .onClick(()=>{
               this.count += this.increaseBy
            })
            .width(300)
            .margin(10)
      }
   }
}

从该示例中,我们可以了解到@State变量首次渲染的初始化流程:

  1. 使用默认的本地初始化:
@State title: Model = new Model('Hello World');
@State count: number = 0;
  1. 对于@State来说,命名参数机制传递的值并不是必选的,如果没有命名参数传值,则使用本地初始化的默认值:
MyComponent({ count: 1, increaseBy: 2 })

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭祖爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值