当前位置: 首页 > news >正文

【HarmonyOS (ArkTS) 基础渲染指南第7天】:条件渲染与循环渲染


1. 条件渲染 (Conditional Rendering)

条件渲染允许根据状态变量的值,动态决定显示哪些组件。这在处理登录状态、权限控制或不同数据展示场景时非常有用。

1.1 基础语法

在 ArkTS 中,支持标准的if/else语句块直接写在build()方法内部。

核心规则:

  • ifelse ifelse必须紧跟在组件容器(如Column,Row)内部。
  • 每个分支必须返回有效的组件或组件树。
  • 条件判断通常基于组件的状态变量(使用@State装饰),但在简单示例中也可以使用普通变量(注意:普通变量变化不会触发 UI 刷新,实际开发中建议使用@State)。

1.2 示例代码解析

// 定义状态变量,初始值为 3@Statenum:number=3;@Entry@Componentstruct Index{build(){Column({space:10}){// 添加间距使布局更美观Text('当前数字:'+this.num).fontSize(20).fontWeight(FontWeight.Bold)// 条件渲染区域if(this.num===1){Text('文本 1').fontSize(30).fontColor(Color.Red)}elseif(this.num===2){Text('文本 2').fontSize(30).fontColor(Color.Blue)}else{// 涵盖 num === 3 及其他所有情况Text('文本 else (默认显示)').fontSize(30).fontColor(Color.Green)}// 模拟交互按钮(仅用于演示状态变化)Row({space:10}){Button('设为 1').onClick(()=>this.num=1)Button('设为 2').onClick(()=>this.num=2)Button('设为 3').onClick(()=>this.num=3)}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}}

1.3 运行结果说明

  • num1时:界面显示红色的“文本 1”。
  • num2时:界面显示蓝色的“文本 2”。
  • num3(或其他值) 时:界面显示绿色的“文本 else (默认显示)”。
  • 动态性:由于使用了@State,点击按钮修改变量时,UI 会自动刷新,无需手动操作 DOM。

2. 循环渲染 (Loop Rendering)

循环渲染用于将数组数据映射为一系列相同的组件结构。在 ArkTS 中,主要通过ForEach接口实现。

2.1 基础语法

ForEach需要三个参数(第三个可选):

  1. 数组:要遍历的数据源。
  2. 生成函数(item, index) => { ... },定义如何为每个元素生成组件。
  3. 键生成函数(可选但推荐):(item) => uniqueKey,用于提高列表更新性能。

重要提示:

  • ForEach只能作为容器的直接子节点(如Column,Row,Grid等)。
  • ForEach生成的闭包内,不能直接使用外层的this上下文中的非静态成员,除非通过箭头函数正确绑定。

2.2 示例代码解析

// 定义数据源names:string[]=['大壮','中壮','小壮'];@Entry@Componentstruct Index{build(){Column({space:15}){Text('家庭成员列表').fontSize(24).fontWeight(FontWeight.Bold).margin({bottom:20})// 循环渲染区域ForEach(this.names,(item:string,index:number)=>{Row(){Text(`${index+1}.${item}`).fontSize(18).fontColor('#333333')// 添加一个简单的图标或装饰Text('👤').fontSize(20).margin({left:10})}.width('90%').padding(15).backgroundColor('#F5F5F5').borderRadius(10).justifyContent(FlexAlign.SpaceBetween)},(item:string)=>item);// 使用名字作为唯一键 (假设名字不重复)}.width('100%').height('100%').justifyContent(FlexAlign.Start).padding(20)}}

2.3 运行结果说明

  • 界面会垂直排列三个卡片式的行(Row)。
  • 第一行显示:1. 大壮 👤
  • 第二行显示:2. 中壮 👤
  • 第三行显示:3. 小壮 👤
  • 每个条目都有独立的背景色、圆角和内边距,看起来像一个整齐的列表。

3. 进阶技巧与注意事项

3.1 状态驱动视图

在实际开发中,务必使用@State@Prop@Link装饰变量。

  • 错误做法let num: number = 3(修改后界面不会变)。
  • 正确做法@State num: number = 3(修改后界面自动重组)。

3.2 ForEach 的键值 (Key)

虽然示例中省略了第三个参数,但在生产环境中,强烈建议提供键值生成函数

  • 作用:帮助框架识别哪些数据项被添加、删除或移动,从而只更新受影响的组件,而不是重绘整个列表。
  • 要求:键值必须是字符串或数字,且在数组中唯一。
// 推荐写法ForEach(items,(item)=>{// ...},(item)=>item.id);// 使用唯一 ID 作为 key

3.3 嵌套使用

条件渲染和循环渲染可以嵌套使用。例如:先判断列表是否为空,如果不为空则循环渲染,否则显示“暂无数据”。

if(this.names.length>0){ForEach(this.names,(item)=>{Text(item)})}else{Text('暂无数据').fontColor(Color.Gray)}

总结

特性条件渲染 (if/else)循环渲染 (ForEach)
用途根据布尔值或枚举值显示不同内容根据数组长度批量生成相同结构的组件
语法位置直接在build()或容器内必须在容器内作为直接子节点
性能关键避免复杂的逻辑判断必须提供唯一的key以优化复用
典型场景登录/未登录视图、空状态页新闻列表、聊天消息、商品网格
http://www.jsqmd.com/news/527289/

相关文章:

  • 正点原子2026开发板教程——从0开始配置Linux内核(5)——设备树在内核中的使用
  • 专业的混凝土模块砖、钢筋混凝土检查井费用高吗,怎么联系厂家 - myqiye
  • 科技中介如何打造数字化服务体系并提升服务专业性?
  • 在Java中如何处理ArithmeticException
  • SpringBoot 业务逻辑层架构设计:Service+DTO+ 参数校验
  • Java 面试高频:ThreadLocal 原理、内存泄漏、使用场景一文讲透
  • React核心语法:组件化与声明式编程
  • 实力强的钢筋混凝土管源头厂家,浙江地区哪家的产品好用? - mypinpai
  • 电脑密码忘了怎么办?【图文讲解】登录密码?密码设置?修改密码?密码错误
  • HUNYUAN-MT AI编程助手增强:为代码注释和文档提供实时翻译
  • Spring Boot 3 + Vue 3 全栈开发课程指南:从零到独立开发通用管理系统,一篇看懂学什么、怎么学
  • 分析2026年黑龙江中等职业推荐学校,哈尔滨理工技工学校怎么收费? - myqiye
  • 深入拆解AI Coding Agent 的底层原理
  • zabbix(二)
  • 发展大道性价比高的肥鱼火锅餐厅,有哪些值得选择? - 工业设备
  • RocketMQ生产者超时问题解析:如何优化sendDefaultImpl的callTimeout配置
  • 掌握Java嵌套循环:实现数字递增的倒置半金字塔
  • 2026 本科毕业论文工具实测:10 款 AI 工具横评
  • 分享哈尔滨有云计算专业的技工学校哪家性价比高 - mypinpai
  • 2026年江浙沪地区好用的钢筋混凝土管品牌,句容荣诚环保科技有限公司靠谱吗 - mypinpai
  • 2026年碟片陶瓷膜厂家推荐:南京艾宇琦膜科技,旋转陶瓷膜/无机陶瓷膜/管式陶瓷膜厂家精选 - 品牌推荐官
  • 门急诊HQMS数据导出系统设计与实现
  • Git-RSCLIP零样本迁移实战:将预训练能力迁移到极地/海洋等特殊遥感场景
  • VidorGraphics:Arduino MKR Vidor 4000 的 FPGA 图形加速库
  • 全频表现维度的高端耳机比拼,均衡通透才是硬实力 - 时事观察官
  • PHP7.4性能优化:在银河麒麟V10 SP2系统上开启OPcache的完整配置指南
  • 光伏板在直流母线上抖着腿晒太阳的时候,蓄电池和超级电容这对“储能兄弟“正在后台疯狂抢活。咱们今天要聊的这个光储并网系统,本质上就是个大型动态功率分配现场
  • 永辉超市购物卡回收攻略,秒变现金! - 团团收购物卡回收
  • 从静态建模到动态建模:仓储空间认知能力的关键跃迁路径—— 基于镜像视界多视角视频融合、无感定位与行为认知的三维空间计算框架
  • 2026年浙江靠谱的环保科技公司排名,浙江句容荣诚环保科技有限公司上榜 - 工业设备