HarmonyOS --@state状态装饰器

news2024/11/19 11:23:32

在声明式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%')  
    }  
  }}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1417379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为 ICT HCIA eNSP 习题汇总】——题目集11

1、某公司的内网用户采用 NAT 技术的 NO-pat 方式访问互联网,若所有的公网地址均被使用,则后续上网的内网用户会()。 A、挤掉前一个用户,强制进行 NAT 转换上网 B、将报文同步到其他 NAT 转换设备上进行 NAT 转换 C、自…

从零学习Linux操作系统 第二十部分 mariadb数据库的管理

一、对于数据库的基本介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver … 3.Mysql (SUN -----> Oracle) 4.mariadb (Mysql的一种) 数据库中的常用名词 1.字段 :表格中的表头 2.表 &…

Qt QPlainTextEdit高亮显示当前行

Qt QPlainTextEdit高亮显示当前行 文章目录 Qt QPlainTextEdit高亮显示当前行摘要错误的代码正确的代码QTextEdit::ExtraSelection 关键字: Qt、 QPlainTextEdit、 QTextBlock、 ExtraSelection、 GPT 摘要 今天要在说一下GPT,当下如果你还不会用G…

【RT-DETR有效改进】反向残差块网络EMO | 一种轻量级的CNN架构(轻量化网络,参数量下降约700W)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是反向残差块网络EMO,其的构成块iRMB在之前我已经发过了,同时进行了二次创新,本文的网络就是由iRMB组成的网络EMO,所以我们二次创新之后的iEMA也可以用于这个网络中,再次形成二次…

04 Redis之命令(Hash型Value命令+List型Value命令+Set型Value命令+有序集合ZSET型Value命令)

3.4 Hash型Value命令 Hash 表就是一个映射表 Map,也是由键-值对构成,为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。 3.4.1 hset  格…

Arm AArch64 alignment(对齐)

数据和指令必须与合适的边界保持对齐(alignment)。访问是否对齐会影响ARM核的性能,并且在将代码从早期的体系结构移植到ARMv8-A时可能会出现可移植性问题。出于性能原因,或者在移植代码时,都值得去注意下对齐问题。本文将讲述了ARMv8-A AArch…

【electron】打包问题处理

目录 项目无法在win7执行场景尝试处理 项目无法在win7执行 场景 使用electron25.0.1、electron-builder24.2.1,打出来的项目在win7系统上跑不起来,报错无法定位程序输入点DiscardVirtualMemoty于动态链接库KERNEL32.dll上。 尝试处理 通过百度发现ele…

flask框架制作前端网页作为GUI

一、语法和原理 (一)、文件目录结构 需要注意的问题:启动文件命名必须是app.py。 一个典型的Flask应用通常包含以下几个基本文件和文件夹: app.py:应用的入口文件,包含了应用的初始化和配置。 requirem…

【漏洞复现】中移铁通禹路由器弱口令漏洞

Nx01 产品简介 中移禹路由器支持宽带拨号、动态IP和静态IP三种上网模式,一般中国移动宽带的光猫都是智能光猫也就是光猫带路由器功能,中移禹路由器作为二级路由使用。 Nx02 漏洞描述 中移禹路由器存在默认口令(admin),攻击者可利用该漏洞获取敏感信息。 Nx03 产品…

用Python编写的简单双人对战五子棋游戏

本文是使用python创建的一个基于tkinter库的GUI界面,用于实现五子棋游戏。编辑器使用的是spyder,该工具。既方便做数据分析,又可以做小工具开发, 首先,导入tkinter库:import tkinter as tk,这…

Qt无边框窗口拖拽和阴影

先看下效果: 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件,一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

HarmonyOS4.0系统性深入开发29层叠布局

层叠布局(Stack) 概述 层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组…

maven中的version加不加SNAPSHOT的区别

我们平时开发时经常看到maven的pom.xml文件里面的包有两种 因为maven的远程仓库一般分为public(Release)和SNAPSHOT,前者代表正式版本,后者代表快照版本。 具体有什么区别呢: 举例说明,你开发了一个基础功能,打包发布…

bxCAN 主要特性

bxCAN 主要特性 ● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议 ● 比特率高达 1 Mb/s ● 支持时间触发通信方案 发送 ● 三个发送邮箱 ● 可配置的发送优先级 ● SOF 发送时间戳 接收 ● 两个具有三级深度的接收 FIFO ● 可调整的筛选器组: — CAN1 和…

Execution failed for task ‘:app:compileFlutterBuildDebug‘. 解决

前言 项目场景:在Flutter项目中 或 在嵌入Flutter模块的Android原生项目; 启动场景:在Android原生端 编译 或 运行 项目时,可能出现这个异常; 异常 Build窗口并没有追踪到,引发异常代码位置,…

微信小程序Skyline在手机端不渲染的问题之一及其解决方式

问题:电脑端是skyline渲染,手机端是webview渲染?如何解? 开发者工具 当前渲染模式:Skyline 当进行预览时手机端却是: 请注意看轮播图的显示情况 请注意看轮播图的显示情况 请注意看轮播图的显示情况 从轮播图上来看,手机端是webview渲染…

[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

聊聊Git合并和变基

一、 Git Merge 合并策略 1.1 Fast-Forward Merge&#xff08;快进式合并&#xff09; //在分支1下操作&#xff0c;会将分支1合并到分支2中 git merge <分支2>最简单的合并算法&#xff0c;它是在一条不分叉的两个分支之间进行合并。快进式合并是默认的合并行为&#…

【BUG】联想Y7000电池电量为0且无法充电解决方案汇总

因为最近火灾很多&#xff0c;所以昨天夜晚睡觉的时候把插线板电源关掉了&#xff0c;电脑也关机了。 各位一定要注意用电安全&#xff0c;网上的那些事情看着真的很难受qvq。 第二天早上起床的时候一看发现电脑直接没电了&#xff0c;插上电源后也是显示 你一定要冲进去啊(ू˃…

TypeScript(三) 声明变量

1.声明变量 1.1. typescript变量声明 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址。   我们可以把变量看做存储数据的容器。   typescript变量的命名规则&#xff1a; &#xff08;1&#xff09;变量名称可以包含数字和字母。 &#xff08;2&#xff0…