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

第5章 ArkUI(下)

在UI开发中,开发者经常会遇到编写相似或重复代码的情况,以确保整体外观和样式的一致性。ArkUI提供了渲染语句、组件的导出和导入、组件代码复用等功能,可以帮助开发者减少编写相似或重复代码的情况,同时确保整体外观和样式的一致性。本章将对ArkUI进阶知识进行详细讲解。

5.1 渲染语句

5.1.1 条件渲染语句

在开发中,有时需要根据某个条件决定是否渲染某个组件,此时可以使用条件渲染语句。条件渲染语句包括if语句、if…else语句、if…else if…else语句。

下面以if语句为例演示条件渲染语句的使用方法。

@Entry @Component struct IfPage {  @State showImg: boolean = true;  build() {    Row() {      Column() {        Checkbox()         .select(this.showImg)         .onChange(isON => {            this.showImg = isON;         })        if (this.showImg) {          Image($r('app.media.coin'))           .width(150)           .height(150)       }     }     .width('100%')   }   .height('100%') } }

5.1.2 循环渲染语句

在开发中,有时需要渲染一批相同的组件。对于这样的需求,可以通过循环渲染语句来实现,从而减少重复的组件代码。

循环渲染语句主要是通过ForEach()函数实现的。

使用ForEach()函数可以基于数组进行循环渲染,在渲染过程中,系统会为每个数组元素生成一个唯一且持久的键,用于标识对应的组件。

当这个键发生变化时,ArkUI将视为该数组元素已被替换或修改,并会基于新的键创建一个新的组件。

ForEach()函数的语法格式如下。 ForEach( arr: Array, itemGenerator: (item: 类型, index?: number) => void, keyGenerator?: (item: 类型, index?: number): string => string )

参数arr表示数据源,它是一个数组。 参数itemGenerator表示组件生成函数。 参数keyGenerator表示键生成函数。 在这两个函数中,item参数表示数组中元素的值,index参数表示数组中元素的索引。

itemGenerator表示的函数会为数组中的每个元素创建组件,该函数中可以包含条件渲染语句,也可以在条件渲染语句中使用ForEach()函数。

在用keyGenerator参数表示的函数中可以自定义键的生成规则。如果开发者没有定义keyGenerator表示的函数,则ArkUI会使用默认的键生成函数,相当于如下代码。

(item: 类型, index: number) => index + '__' + JSON.stringify(item);

下面通过代码演示ForEach()函数的使用方法。

interface GoodsItem {  id: number;  goods_name: string;  goods_img: Resource;  goods_price: number;  goods_count: number; } @Entry @Component struct ForEachPage {  @State list: GoodsItem[] = [{    id: 1,    goods_name: 'Vue.js前端开发实战(第2版)',    goods_img: $r('app.media.vue'),    goods_price: 49.8,    goods_count: 1, }, {    id: 2,    goods_name: '软件测试(第2版)',    goods_img: $r('app.media.test'),    goods_price: 49.8,    goods_count: 1, }, {    id: 3,    goods_name: 'PHP+MySQL动态网站开发',    goods_img:  $r('app.media.mysql'),    goods_price: 49.8,    goods_count: 1, }, {    id: 4,    goods_name: 'Python数据预处理',    goods_img: $r('app.media.python'),    goods_price: 39.8,    goods_count: 1, }];  build() {    List() {      ForEach(this.list, (item: GoodsItem) => {        ListItem() {          Row({ space: 10 }) {            Image(item.goods_img)             .borderRadius(8)             .width(120)             .height(200)            Column() {              Text(item.goods_name)               .fontWeight(FontWeight.Bold)              Text('¥' + item.goods_price.toString() )               .fontColor(Color.Red)               .fontWeight(FontWeight.Bold)           }           .padding({ top: 5, bottom: 5 })           .alignItems(HorizontalAlign.Start)           .justifyContent(FlexAlign.SpaceBetween)           .height(200)           .layoutWeight(1)         } &nb
http://www.jsqmd.com/news/1397518/

相关文章:

  • 还在三款软件间来回切?这款Switch游戏文件传输工具把装游戏压到五分钟
  • Linux进程间通信(IPC)详解:信号、管道、共享内存与信号量
  • 2026苏州钻戒出手参考:理清钻石回收估价逻辑,避开四大常见套路 - 好物循环记
  • 乌鲁木齐汽车贴膜推荐哪家?贴车衣、车窗膜哪家好?追光靠谱吗,施工技术和口碑都好的门店推荐 - zhouzhou12321
  • 2026 年南昌微挖拆除|砸墙|微挖机租赁去哪里找? - LYL仔仔
  • 从零搭建私有GitLab:安装配置、权限管理与CI/CD实战指南
  • Burp Suite、Fiddler与Charles抓包工具横向对比:从原理到实战选型指南
  • 【IEEE出版 | 会后快至3-4个月检索】2026年低空技术与智能系统国际学术会议(LATIS 2026)
  • MySQL实现UPSERT操作:从INSERT ON DUPLICATE KEY UPDATE到临时表方案详解
  • 空洞骑士模组管理器 Lumafly 使用指南:跨平台装模组,一篇看懂怎么用
  • Sunshine游戏串流上手记:把客厅电视变成第二块游戏屏幕
  • OpenClaw安全加固指南:从基础配置到高级防护
  • 2026深圳光明区同城搬家行业科普指南 - 深圳家顺兴搬家
  • 华为迈普设备SSH登录失败排查指南:从原理到实战解决运维难题
  • 2026年南洋电缆供应商选择:国标全系列线缆哪家有优势 选型指南 - 全域品牌推荐
  • 卖包被临时压价?聊聊奢侈品回收那些隐形套路 - 朝夕热点速报
  • LaTeX表格加粗排版难题:从原理到实战的完整解决方案
  • SMB协议全解析:从原理到实战,构建高速局域网文件共享
  • 2026工业炉制造厂家实力甄选:聚焦节能耐高温精密型源头工厂 - 卓企推荐
  • 深入解析互斥锁与信号量:从竞态条件到生产者-消费者模型
  • 2026年茂名建筑设计专业推荐,哪个更受青睐? - 官方资讯
  • NCM文件解密完整指南:用ncmdump快速解锁网易云音乐格式
  • 网页媒体资源捕获终极手册:猫抓扩展四步上手,网页视频下载不再求人
  • 乐清虹桥镇口碑推荐|贝盈幼儿园安全守护与膳食管理体系合规评估报告 - 起跑123
  • 企业AI落地首选销售场景:技术栈、ROI与实施路径全解析
  • 超越单一指标:构建AI竞争力的多维度评估框架与工程实践
  • 2026 年南昌人工拆除|微挖拆除|废品拆除回收服务怎么选? - LYL仔仔
  • 艾尔登法环帧率解锁完整攻略:免费工具突破60帧限制,畅享144Hz丝滑战斗
  • 深圳搬家行业合规服务现状及满意度核心数据解读 - 深圳家顺兴搬家
  • windows‑exporter下载安装全教程!!!