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

arkUI:遍历数据数组动态渲染(forEach)

arkUI:遍历数据数组动态渲染(forEach)

  • 1 主要内容说明
  • 2 相关内容
    • 2.1 ForEach 的基本语法
    • 2.2 简单遍历数组
    • 2.2 多维数组遍历
    • 2.4 使用唯一键
    • 2.5 源码1的相关说明
      • 2.5.1 源码1 (遍历数据数组动态渲染)
      • 2.5.2 源码1运行效果
  • 3.结语
  • 4.定位日期

1 主要内容说明

在 ArkUI 中,ForEach 是用于遍历数据数组并动态渲染 UI 组件的一种方法。它类似于 JavaScript 中的 Array.forEach,但在 UI 框架中,它有特定的要求来确保每个渲染项都有唯一标识,以便在组件更新时保持高效、准确的渲染。通过 ForEach 方法,可以高效地遍历数据并动态生成 UI 项目,非常适合用于列表、网格等多项数据的展示。

2 相关内容

2.1 ForEach 的基本语法

ForEach(dataArray,       // 需要遍历的数据数组(item) => {      // 回调函数:每个遍历项的处理逻辑// 渲染逻辑},(key) => {       // 唯一键生成函数(可选):返回每个项的唯一键值// 键值生成逻辑}
)
  • dataArray
    ---------- 需要遍历的数据,通常是一个数组。
  • 回调函数 (item) => {...}
    ---------- 每次遍历的当前项。可以使用该回调函数中的 item 渲染每一项内容。
  • 唯一键生成函数 (key) => {...}
    ---------- 这是可选参数,但建议使用。用于为每个渲染项生成唯一的键值。
    ---------- 生成的键可以是字符串或数值类型,以保证在 ForEach 渲染的每个组件项中都是唯一的。

2.2 简单遍历数组

ForEach(["苹果", "香蕉", "菠萝"], // 数据数组(item) => {                // 遍历项Text(item);              // 渲染每一项为文本}
);

2.2 多维数组遍历

  • 可以嵌套 ForEach 以处理多维数组,例如二维数组。以下示例展示了如何遍历一个二维数组
const fruits = [["苹果1号", "苹果2号"],["香蕉1号", "香蕉2号"],
];ForEach(fruits,(subArray) => {           // 每个 subArray 是一个子数组ForEach(subArray,(fruit) => {Text(fruit);});}
);

2.4 使用唯一键

  • 为了避免重复的键,推荐使用第三个参数生成唯一键。以下示例展示了如何基于元素值生成唯一键
ForEach(fruits,(subArray) => {ForEach(subArray,(fruit) => {Text(fruit);},(fruit) => fruit  // 使用 fruit 字符串本身作为唯一键);}
);

当数据变动时,ForEach 会根据唯一键来判断是否需要重新渲染特定项。如果没有唯一键,可能会出现渲染错误或性能问题。对于复杂结构或大量数据,确保键的唯一性可以提高渲染效率,避免多余的 UI 刷新。

2.5 源码1的相关说明

源码1定义了一个名为 PageForEach 的组件,在该组件中使用了三组 Flex 布局,每组 Flex 布局内通过 ForEach 方法遍历并渲染 arr 数组中的数据。arr 是一个二维字符串数组,包含不同水果的编号信息。

  • ForEach 循环
    ---------- 每个 ForEach 循环内都嵌套了两层遍历:
    ---------- 第一层遍历 arr 的行(每种水果的编号列表)。
    ---------- 第二层遍历每个水果编号,并将其渲染成 Text 文本。
    ---------- 在第二个和第三个 Flex 布局的 ForEach 中,指定了唯一键生成函数以防止渲染重复项。
    ---------- 第三个flex布局中,设置了一个叫“自命名键”的键,因为只有一个键,所以forEach只会输出第一个元素的内容,第一层数组会进行一次循环,每次第二层数组只会根据“自命名键”单个键输出第一个元素的内容。第一层数组是有多个二层数组的。

2.5.1 源码1 (遍历数据数组动态渲染)

@Entry
@Component
struct PageForEach {// 定义一个二维数组,保存不同种类的水果名称@State arr: string[][] = [["苹果1号", "苹果2号", "苹果1号", "苹果4号"],["香蕉1号", "香蕉2号", "香蕉1号", "香蕉4号"],["菠萝1号", "菠萝2号", "菠萝1号", "菠萝4号"],["西瓜1号", "西瓜2号", "西瓜1号", "西瓜4号"],["椰子1号", "椰子2号", "椰子1号", "椰子4号"],];// 页面构建方法build() {Column() {// 第一个 Flex 布局,宽度设置为 25%Flex({wrap: FlexWrap.Wrap,}) {ForEach(this.arr,(item1: string[]) => {ForEach(item1,(item2: string) => {// 将数组中的每个字符串显示为文本Text(item2).width("25%")  // 设置每个文本的宽度为 25%.textAlign(TextAlign.Center)  // 文本居中对齐});});}.width("100%")  // Flex 布局宽度占满整个容器.backgroundColor("#ffecec00")  // 背景色.margin("5%");  // 外边距// 第二个 Flex 布局,宽度设置为 33%Flex({wrap: FlexWrap.Wrap,}) {ForEach(this.arr,(item1: string[]) => {ForEach(item1,(item2: string) => {Text(item2).width("33%")  // 设置每个文本的宽度为 33%.textAlign(TextAlign.Center)},(item3: string) => {// 每个 item 的唯一键return item3;});});}.width("100%").backgroundColor("#ff11d92f").margin("5%");// 第三个 Flex 布局,使用自定义的键Flex({wrap: FlexWrap.Wrap,}) {ForEach(this.arr,(item1: string[]) => {ForEach(item1,(item2: string) => {Text(item2).width("33%").textAlign(TextAlign.Center)},(item3: string) => {// 设置自定义的键值 "自命名键"(注意:所有元素使用相同键可能会影响性能)return "自命名键";});});}.width("100%").backgroundColor("#ffec5e5e").margin("5%");}}
}

2.5.2 源码1运行效果

在这里插入图片描述

3.结语

因为最近用到了forEach,由想起了二维数组的内容,于是将两者结合编写了本文。用以往后的回顾和查询。
由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

4.定位日期

2024-11-11;
23:54;

相关文章:

arkUI:遍历数据数组动态渲染(forEach)

arkUI:遍历数据数组动态渲染(forEach) 1 主要内容说明2 相关内容2.1 ForEach 的基本语法2.2 简单遍历数组2.2 多维数组遍历2.4 使用唯一键2.5 源码1的相关说明2.5.1 源码1 (遍历数据数组动态渲染)2.5.2 源码1运行效果 …...

js中import引入一个export值可以被修改。vue,react

import引入的数据实际就是数据本身。 如果导出的是一个对象,该对象引入后被更改了,则会影响其他文件引入此对象 解释示例: // resources.js const obj {} export {obj} 当在a.js中import引入一个空对象obj,并且新增一个属性ob…...

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…...

域名解析线路类型有哪几种

在网络世界中,域名解析是将域名转换为IP地址的关键环节,而域名解析线路类型的不同则为域名解析提供了多样化的策略,以满足不同用户和网络环境的需求。以下是几种常见的域名解析线路类型。 电信线路 电信线路解析主要是针对中国电信网络用户…...

Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了

这一篇让我想起来学习 Spring 的时&#xff0c;被 XML 支配的恐惧。明明是写Java&#xff0c;为啥要搞个XML呢&#xff1f;大佬们永远不知道&#xff0c;我认为最难的是 XML 头&#xff0c;但凡 Spring 用 JSON来做配置文件&#xff0c;Java 界都有可能再诞生一个扛把子。 <…...

[运维][Nginx]Nginx学习(2/5)-Nginx高级

Nginx服务器基础配置实例 前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。通过这些指令的合理配置&#xff0c;我们就可以让一台Nginx服务器正常工作&#xff0c;并且提供基本的web服务器功能。 接下来我们将通过一个比较完整和最简单的基础配…...

【快捷入门笔记】mysql基本操作大全-SQL数据库

SQL数据库 一、创建数据库 – 创建一个新数据库 fang_fang CREATE DATABASE fang_fang;– 显示所有数据库以确认创建 SHOW DATABASES;– 使用新数据库fang_fang USE fang_fang;– 检查我们正在使用哪个数据库 SELECT DATABASE();二、 删除数据库 –当你确定数据库存在并…...

【LeetCode】【算法】15. 三数之和

LeetCode 15. 三数之和 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不…...

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼&#xff0c;你准备怎么做&#xff0c;你会将活鱼红烧或将死鱼清蒸吗&#xff1f;好的食材只需要最简单的烹饪&#xff0c;不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点&#xff0c;广域网就是那条死鱼&#xff0c;数据中心则是那条活鱼。…...

JMeter进阶篇

目录 上篇导航&#xff1a; 总目录&#xff1a; 一、逻辑控制器&#xff1a; 1.逻辑控制器和关联&#xff1a; 2.if逻辑控制器&#xff1a; 3.forEach控制器&#xff1a; 4.循环控制器&#xff1a; 二、关联&#xff1a; 1.xpath&#xff1a; 2.正则表达式提取器&…...

LabVIEW编程基础教学(一)--介绍

LabVIEW&#xff08;Laboratory Virtual Instrument Engineering Workbench&#xff09;是一种基于图形化编程的开发环境&#xff0c;专为工程应用、测试、测量、控制系统等设计。与传统的文本编程语言不同&#xff0c;LabVIEW 使用图形化的方式通过“数据流”模型来表示程序逻…...

HVV蓝队基础

免责声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 企业网络架构 企业技术和信…...

[运维][Nginx]Nginx学习(1/5)--Nginx基础

Nginx简介 背景介绍 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】&#xff0c;同时也是一个【POP3/SMTP/IMAP代理服务器】&#xff0c;是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的&#xff0c;Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一…...

创客节小学组C++模拟题

来源:加码未来2024年深圳罗湖区创客节模拟题(小学组) 第一题 题目描述 给你n个数,找出出现次数超过一半的数。题目保证这样的数一定存在。 输入格式 第一行一个整数n,(n<=1000) 第二行n个整数(<1000000) 输出格式 输出一个整数 样例输入 5 1 2 3 3 3 样例输…...

阿里云ECS服务器使用限制及不允许做的事情

阿里云ECS&#xff08;Elastic Compute Service&#xff09;是一种高性能的弹性计算服务&#xff0c;允许用户在云端创建和管理虚拟服务器。尽管ECS提供了强大的功能&#xff0c;但在使用过程中&#xff0c;阿里云有一些限制和不允许的行为。以下是一些主要的使用限制和禁止行为…...

Linux开发讲课49--- Linux 启动过程分析

理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动&#xff0c;似乎可以理解。但内核本身是如何启动的呢&#xff1f;initrd&#xff08;initial ramdisk&#xff09; 和引导程序(bootloader)具有哪些功能&#…...

Java-03

目录 算法 1.小美的因子查询 2.小美的密码 3.小美的数组删除 4.小美和大富翁 知识点 InnoDB中的行级锁是怎么实现的&#xff1f; 介绍一下Java中的IO流 讲讲Java的跨平台原理 COUNT&#xff08;1&#xff09;与COUNT&#xff08;*&#xff09;区别 Redis 为什么要用…...

微积分复习笔记 Calculus Volume 1 - 5.3 The Fundamental Theorem of Calculus

5.3 The Fundamental Theorem of Calculus - Calculus Volume 1 | OpenStax...

c++如何绑定一个类与类内成员的关系

在 C 中&#xff0c;成员函数和成员变量的归属关系&#xff08;即某个成员属于哪个类&#xff09;是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定…...

关于解决使用VMWare内的虚拟机无法识别USB问题小结

目录 前言 0. 查看是不是没有开启USB3.0的支持 1. 检查一下是否禁用了VMWare USB服务 2. 无奈之举 前言 笔者今天帮助一位同志解决了VMWare内的虚拟机不识别挂载设备的办法。这里对笔者使用的排查手段做一个总结。 0. 查看是不是没有开启USB3.0的支持 我们的第一件事情就…...

终极鸣潮优化指南:3分钟解锁120FPS与专业抽卡分析

终极鸣潮优化指南&#xff1a;3分钟解锁120FPS与专业抽卡分析 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否还在为《鸣潮》的60FPS帧率限制而烦恼&#xff1f;是否想科学分析自己的抽卡概率&#…...

为什么93%的Gemini集成应用在48小时内必须升级?权威发布:3个高危CVE编号+官方回滚方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini Bug修复公告 近日&#xff0c;我们在 Gemini 模型推理服务的 v2.4.1 版本中发现一个影响高并发场景下响应一致性的关键缺陷&#xff1a;当连续提交含嵌套 JSON Schema 的结构化请求时&#xff0…...

trae之mcp服务初体验 完美实现某视频请求头参数x-ca-sign值逆向

问题提问: 请通过 MCP 服务分析 https://m.yichengwlkj.com/pc?channel=CHANNEL_USK 网站中的 https://api.rrmj.plus/m-station/app/page?position=CHANNEL_USK&pageNum=1&personalRecommend=0 请求链接。该请求的请求头中包含一个名为 x-ca-sign 的参数,该参数的…...

鸣潮自动化脚本终极指南:解放双手的完整解决方案

鸣潮自动化脚本终极指南&#xff1a;解放双手的完整解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了在《鸣潮…...

在自动化工作流中集成 Taotoken 实现按需调用与成本优化

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在自动化工作流中集成 Taotoken 实现按需调用与成本优化 自动化工作流&#xff0c;例如 CI/CD 流水线、监控脚本或定期报告生成任务…...

macOS百度网盘高速下载破解:3步实现SVIP级别下载体验

macOS百度网盘高速下载破解&#xff1a;3步实现SVIP级别下载体验 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘作为国内最主流的云存储服务&…...

如何一键捕获完整网页内容?这款免费Chrome插件让你轻松搞定

如何一键捕获完整网页内容&#xff1f;这款免费Chrome插件让你轻松搞定 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-…...

如何在macOS上使用LyricsX打造完美歌词体验:终极指南

如何在macOS上使用LyricsX打造完美歌词体验&#xff1a;终极指南 【免费下载链接】LyricsX &#x1f3b6; Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX LyricsX是一款专为macOS设计的终极歌词同步应用&#xff0c;能够自动为你…...

机器学习原子间势能模型的不确定性量化:POPS框架解决模型误设挑战

1. 项目概述与核心挑战在材料科学和计算物理领域&#xff0c;机器学习原子间势能模型&#xff08;MLIAP&#xff09;的崛起&#xff0c;让我们第一次有机会以接近第一性原理&#xff08;如密度泛函理论&#xff0c;DFT&#xff09;的精度&#xff0c;去模拟包含成千上万个原子的…...

KLayout 0.29.12版图编辑工具:DRC验证引擎性能提升20%与多工艺节点设计支持

KLayout 0.29.12版图编辑工具&#xff1a;DRC验证引擎性能提升20%与多工艺节点设计支持 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout是一款开源的集成电路版图编辑与验证工具&#xff0c;专注于GDSII/O…...