DevEco Studio:状态管理与事件处理

引言

在现代前端开发中,状态管理和事件处理是构建交互式应用的核心。DevEco Studio,作为华为推出的开发环境,支持开发者使用TypeScript构建HarmonyOS应用。本文将通过三个示例代码,深入探讨如何在DevEco Studio中管理状态和处理事件。

第一节:状态变量与界面刷新

1.1 状态变量的重要性

在DevEco Studio中,状态变量(使用[@State](https://my.oschina.net/states) 装饰器修饰的变量)的变化会自动触发界面的刷新。这与普通变量不同,普通变量的变化不会引起界面的更新。

示例代码一
@Entry
@Component
struct Index { @State message: string = 'Hello World'; build() { Row() { Column() { Button('这是一个对话框')
.onClick(() => { console.log('log:', '对话框')
AlertDialog.show({ message: '这是一个对话框框'
})
})
Text('这是一个文本')
.onClick(() => { console.log('log:', '文本')
AlertDialog.show({ message: '这是一个文本组件'
})
})
}
.width('100%')
}
.height('100%')
}
}

运行结果

点击事件运行结果

1.2 普通变量与状态变量的区别

  • 普通变量:只能在初始化时渲染,后续变化了,也不会引起更新。
  • 状态变量:被装饰器修饰,值的改变会[自动]引起界面的刷新。
示例代码二
let myname: string = 'thewang'
@Entry
@Component
struct Index { myage: number = 19
@State mymsg: string = 'hello thewang' build() { Column() { Text(myname).onClick(() => { myname = 'thetwo'
console.log('myname', myname)
})
Text(this.myage.toString()).onClick(() => { this.myage = 18
console.log('age', this.myage)
})
Text(this.mymsg).onClick(() => { this.mymsg = 'hello'
})
}
}
}

运行结果

HarmonyOS Next点击事件2

第二节:事件处理与界面更新

2.1 事件处理基础

在DevEco Studio中,事件处理是通过.onClick()方法实现的,它允许我们在用户交互时执行特定的函数。

示例代码三

计数器案例

@Entry
@Component
struct Index { @State count: number = 1 build() { Row() { Button('-')
.onClick(() => { this.count = this.count - 1
})
Text(this.count.toString()).margin(10)
Button('+')
.onClick(() => { this.count = this.count + 1
})
}
.padding(20)
}
}

运行结果

HarmonyOS Next计数器案例

2.2 状态变量与界面更新

在上述代码中,count是一个状态变量。当按钮被点击时,count的值会改变,这会自动触发界面的更新,显示最新的计数。

2.3 界面布局与样式

  • Row 和 Column:用于创建行和列的布局。
  • Text 和 Button:用于显示文本和按钮。
  • margin 和 padding:用于设置组件的边距。

第三节:算术运算符的使用

3.1 基本算术运算符

在TypeScript中,基本的算术运算符包括加(+)、减(-)、乘(*)、除(/)和取余(%)。

示例代码
console.log('result', 1 + 1);
console.log('result', 2 - 1);
console.log('result', 2 * 3);
console.log('result', 6 / 3);
console.log('remainder', 7 % 2); // 3余1

3.2 赋值运算符

赋值运算符允许我们将一个值赋给变量,或者对变量进行计算后重新赋值。

示例代码
let num2: number = 77;
num2 %= 10;
console.log('num2', num2);

运行结果

第四节:组件布局的构建

4.1 组件布局基础

在DevEco Studio中,我们可以使用ColumnRow组件来构建布局。

示例代码二
@Entry
@Component
struct Index { build() { Column() { // 外层Column,设置间距为8
Column({
space: 8 }) { // 用颜色填充代替图片,使用Stack组件
Stack()
.width('100%')
.height(200) // 设置高度,根据实际情况调整
.backgroundColor('gray') // 设置背景颜色,这里用灰色示例
.borderRadius({
topLeft: 6, topRight: 6 }) // 设置圆角 // 标题文字
Text('这是标题,颜色填充部分可以换成图片')
.fontSize(14)
.lineHeight(18)
.padding({
left: 5, right: 5 }) // 来源和点赞
Row() { // 来源
Row() { Stack()
.width(16)
.height(16) // 设置高度,根据实际情况调整
.backgroundColor('blue') // 设置背景颜色,这里用蓝色示例
.margin({
right: 3 })
Text('用户名称')
.fontSize(12)
.fontColor('#7e7e7e')
} // 点赞
Row() { Stack()
.width(14)
.height(14) // 设置高度,根据实际情况调整
.backgroundColor('red') // 设置背景颜色,这里用红色示例
.margin({
right: 3 })
Text('8888')
.fontSize(12)
.fontColor('#7e7e7e')
}
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.padding({
left: 5, right: 5 })
}
.width('50%')
}
.padding(20)
}
}

运行结果

结语

通过本文,我们学习了在DevEco Studio中管理状态和处理事件的基础知识。这些知识对于构建交互式应用至关重要。希望本文能够帮助你更好地理解和应用DevEco Studio进行开发。


注意:文章中提到的代码示例需要在DevEco Studio环境中运行,确保你已经配置好了相应的开发环境。如果你在运行示例时遇到任何问题,可以参考DevEco Studio的官方文档或寻求社区的帮助。

DevEco Studio:状态管理与事件处理的更多相关文章

  1. 查收新年礼物丨DevEco Studio 3.0 Beta2发布,20个新变化详解

    HUAWEI DevEco Studio是开发HarmonyOS应用和原子化服务的一站式集成开发环境(IDE),为开发者提供工程模板创建.开发.编译.调试.发布等功能. 2021年12月31日,新版本 ...

  2. ASP.NET状态管理详解,让你明明白白

    开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...

  3. vuex状态管理

    msvue组件间通信时,若需要改变多组件间共用状态的值.通过简单的组件间传值就会遇到问题.如:子组件只能接收但改变不了父组件的值.由此,vuex的出现就是用作各组件间的状态管理. 简单实例:vuex的 ...

  4. 大数据计算引擎之Flink Flink状态管理和容错

    这里将介绍Flink对有状态计算的支持,其中包括状态计算和无状态计算的区别,以及在Flink中支持的不同状态类型,分别有 Keyed State 和 Operator State .另外针对状态数据的 ...

  5. Redux状态管理方法与实例

    状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...

  6. 表格搞定 Asp.net Web 状态管理

    最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...

  7. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

  8. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  9. [Asp.Net]状态管理(ViewState、Cookie)

    简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...

  10. HttpClient_HttpClient 4.3.6 HTTP状态管理

    HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...

随机推荐

  1. TFC-Pretraining: 基于时间频率一致性对时间序列进行自监督对比预训练《Self-Supervised Contrastive Pre-Training for Time Series via Time-Frequency Consistency》(时间序列、时序表征、时频一致性、对比学习、自监督学习)

    2023年11月10日,今天看一篇论文,现在17:34,说实话,想摆烂休息,不想看,可还是要看,拴Q. 论文:Self-Supervised Contrastive Pre-Training for ...

  2. [OI] 指针与迭代器

    取地址与解引用 一般来说,我们有一个取地址符 & 可以返回该变量的地址. int main(){ int a; cout<<&a; } 0x6ffe1c 如果我们现在有一个 ...

  3. Dockerfile相关(推送镜像?私有仓库?)(九)

    上面我们讲到了 Dockerfile 的基本写法以及构建镜像的时候一些注意事项,那么镜像构建完成后,如何把我们的镜像给到别人使用呢?第一种方法就是利用 Docker 官方提供的公共的 Docker H ...

  4. LeetCode 1349. 参加考试的最大学生数 (状压DP 或 二分图最大独立子集)

    给你一个 m * n 的矩阵 seats 表示教室中的座位分布.如果座位是坏的(不可用),就用 '#' 表示:否则,用 '.' 表示. 学生可以看到左侧.右侧.左上.右上这四个方向上紧邻他的学生的答卷 ...

  5. ModbusTCP通信协议分析

    前言 大家好!我是付工.前面给大家介绍了一系列关于RS485与Modbus的知识. 终于有人把RS485说清楚了 终于有人把Modbus说明白了 通透!终于把ModbusRTU弄明白了 今天跟大家聊聊 ...

  6. std::stod:“123.456”-> 123.456

    std::stod 是 C++ 标准库中一个用于将字符串转换为 double 类型的函数.它属于 <string> 头文件中的函数,通常用于将包含数字的字符串转换为相应的浮点数值. 函数原 ...

  7. Nuxt.js 应用中的 page:transition:finish 钩子详解

    title: Nuxt.js 应用中的 page:transition:finish 钩子详解 date: 2024/10/10 updated: 2024/10/10 author: cmdrago ...

  8. 为什么科技企业都在建设API开放平台?

    一.API开发者门户的兴起 随着数字化转型的推进,越来越多的企业开始依赖 API 来实现内部系统的连接与外部服务的集成.然而,企业在API管理方面面临着复杂且繁琐的挑战:API的调用关系混乱.难以追踪 ...

  9. npm install报错 SyntaxError: Unexpected end of JSON input while parsing near '...=GmVg\r\n-----END PGP'

    解决方法:  npm cache clean --force 然后重新执行:npm install即可

  10. KubeSphere 3.3.0 离线安装教程

    作者:老Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及Kubernetes.KubeSphere.DevOps.OpenStack.Ansib ...