HarmonyOS ArkTS @State 状态实战:输入框、按钮、Toggle 开关三大交互案例详解
·
一、博客摘要
在鸿蒙 ArkTS 开发中,@State是实现数据驱动 UI的核心装饰器,只要状态变量发生变化,所有绑定该变量的组件会自动刷新页面,无需手动更新视图。 本文结合两个完整实战 Demo,手把手讲解三种最常用交互场景:
- TextInput 输入框双向实时回显
- Button 点击切换文本状态
- Toggle 滑动开关实现夜览模式全局换肤 覆盖线性布局
Column/Row、三元表达式动态渲染、事件回调等高频知识点,适合 ArkTS 零基础入门学习
二、前置核心知识点
1. @State 状态装饰器
- 作用:修饰组件内变量,使其成为响应式状态;
- 规则:变量修改后,页面所有引用该变量的组件自动重新渲染;
- 支持类型:字符串
string、布尔boolean、数字number等基础类型。
2. 核心组件说明
表格
| 组件 | 用途 | 核心事件 |
|---|---|---|
| TextInput | 单行文本输入框 | .onChange 监听输入内容变化 |
| Button | 可点击按钮 | .onClick 监听点击操作 |
| Toggle | 滑动开关 / 勾选框 | .onChange 监听开关切换 |
| Column | 垂直线性布局 | {space:数值} 设置内部上下间距 |
| Row | 水平线性布局 | 子组件从左到右横向排列 |
3. 三元表达式(动态 UI 核心)
语法:条件 ? 成立值 : 不成立值 可动态控制:文字内容、背景色、字体颜色、尺寸等任意组件属性。
三、Demo1:输入框 + 按钮状态切换(Index.ets)
1. 完整源码

2. 功能分层讲解
(1)文本输入实时回显逻辑
- 定义
@State msg:string=""存储输入内容; TextInput绑定text:this.msg读取状态;- 输入时触发
.onChange,将输入值赋值给this.msg; - 下方
Text(this.msg)自动同步渲染输入文字,实现双向联动。
(2)Button 点击切换状态逻辑
- 布尔状态
isOpen默认false,按钮初始显示「开关已关闭」; - 点击按钮执行
this.isOpen = !this.isOpen,布尔值取反; - 两处 UI 同步更新:按钮文字、底部状态提示文本,全部自动刷新。
3. 运行预览效果
- 在输入框打字,下方实时同步展示输入内容;
- 点击蓝色按钮,按钮文字切换,底部同步显示「打开 / 关闭」状态;
- 所有组件上下均匀分布,页面留有边距不贴屏幕边缘。
四、Demo2:Toggle 滑动开关实现夜览模式换肤(6.24Examp2.ets)
1. 完整源码
2. 核心逻辑拆解
(1)Toggle 滑动开关
ToggleType.Switch代表移动端标准滑动开关组件; 滑动触发.onChange回调,修改isOpen布尔状态。
(2)全局动态换肤(三元表达式双重使用)
- 动态文字:
isOpen=true显示「夜览模式已开启」,反之显示关闭; - 动态背景色:开启时页面填充浅灰色
0xd3d3d3,关闭为纯白色; width("100%")+height("100%")让 Text 填满剩余屏幕,实现全局背景切换效果。
3. 交互效果
- 初始开关关闭:页面白底,提示文字「夜览模式已关闭」;
- 右滑打开开关:页面整体变为灰色,文字同步切换;
- 左滑关闭开关,页面恢复纯白,所有状态复原。
更多推荐



所有评论(0)