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 的时,被 XML 支配的恐惧。明明是写Java,为啥要搞个XML呢?大佬们永远不知道,我认为最难的是 XML 头,但凡 Spring 用 JSON来做配置文件,Java 界都有可能再诞生一个扛把子。 <…...
[运维][Nginx]Nginx学习(2/5)-Nginx高级
Nginx服务器基础配置实例 前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。通过这些指令的合理配置,我们就可以让一台Nginx服务器正常工作,并且提供基本的web服务器功能。 接下来我们将通过一个比较完整和最简单的基础配…...
【快捷入门笔记】mysql基本操作大全-SQL数据库
SQL数据库 一、创建数据库 – 创建一个新数据库 fang_fang CREATE DATABASE fang_fang;– 显示所有数据库以确认创建 SHOW DATABASES;– 使用新数据库fang_fang USE fang_fang;– 检查我们正在使用哪个数据库 SELECT DATABASE();二、 删除数据库 –当你确定数据库存在并…...
【LeetCode】【算法】15. 三数之和
LeetCode 15. 三数之和 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不…...
传输协议设计与牧村摆动(Makimoto‘s Wave)
有一条活鱼和一条死鱼,你准备怎么做,你会将活鱼红烧或将死鱼清蒸吗?好的食材只需要最简单的烹饪,不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点,广域网就是那条死鱼,数据中心则是那条活鱼。…...
JMeter进阶篇
目录 上篇导航: 总目录: 一、逻辑控制器: 1.逻辑控制器和关联: 2.if逻辑控制器: 3.forEach控制器: 4.循环控制器: 二、关联: 1.xpath: 2.正则表达式提取器&…...
LabVIEW编程基础教学(一)--介绍
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种基于图形化编程的开发环境,专为工程应用、测试、测量、控制系统等设计。与传统的文本编程语言不同,LabVIEW 使用图形化的方式通过“数据流”模型来表示程序逻…...
HVV蓝队基础
免责声明 学习视频来自B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 企业网络架构 企业技术和信…...
[运维][Nginx]Nginx学习(1/5)--Nginx基础
Nginx简介 背景介绍 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一…...
创客节小学组C++模拟题
来源:加码未来2024年深圳罗湖区创客节模拟题(小学组) 第一题 题目描述 给你n个数,找出出现次数超过一半的数。题目保证这样的数一定存在。 输入格式 第一行一个整数n,(n<=1000) 第二行n个整数(<1000000) 输出格式 输出一个整数 样例输入 5 1 2 3 3 3 样例输…...
阿里云ECS服务器使用限制及不允许做的事情
阿里云ECS(Elastic Compute Service)是一种高性能的弹性计算服务,允许用户在云端创建和管理虚拟服务器。尽管ECS提供了强大的功能,但在使用过程中,阿里云有一些限制和不允许的行为。以下是一些主要的使用限制和禁止行为…...
Linux开发讲课49--- Linux 启动过程分析
理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动,似乎可以理解。但内核本身是如何启动的呢?initrd(initial ramdisk) 和引导程序(bootloader)具有哪些功能&#…...
Java-03
目录 算法 1.小美的因子查询 2.小美的密码 3.小美的数组删除 4.小美和大富翁 知识点 InnoDB中的行级锁是怎么实现的? 介绍一下Java中的IO流 讲讲Java的跨平台原理 COUNT(1)与COUNT(*)区别 Redis 为什么要用…...
微积分复习笔记 Calculus Volume 1 - 5.3 The Fundamental Theorem of Calculus
5.3 The Fundamental Theorem of Calculus - Calculus Volume 1 | OpenStax...
c++如何绑定一个类与类内成员的关系
在 C 中,成员函数和成员变量的归属关系(即某个成员属于哪个类)是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定…...
关于解决使用VMWare内的虚拟机无法识别USB问题小结
目录 前言 0. 查看是不是没有开启USB3.0的支持 1. 检查一下是否禁用了VMWare USB服务 2. 无奈之举 前言 笔者今天帮助一位同志解决了VMWare内的虚拟机不识别挂载设备的办法。这里对笔者使用的排查手段做一个总结。 0. 查看是不是没有开启USB3.0的支持 我们的第一件事情就…...
2026最权威的十大降AI率神器实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能生成内容也就是 AIGC 被广泛应用,文本的机器化特征越发明显地呈现出…...
C++ 地址空间随机化(ASLR):探讨 C++ 动态链接库在内存布局上的安全特性
尊敬的各位同仁,各位对系统安全和C编程充满热情的开发者们,大家下午好!今天,我们齐聚一堂,共同探讨一个在现代软件安全领域至关重要的主题——地址空间布局随机化(ASLR),特别是它如何…...
零基础玩转mxbai-embed-large-v1:6大核心功能实战,从向量化到摘要生成
零基础玩转mxbai-embed-large-v1:6大核心功能实战,从向量化到摘要生成 1. 引言:为什么选择mxbai-embed-large-v1? mxbai-embed-large-v1是当前自然语言处理领域的一颗新星,这款多功能句子嵌入模型在MTEB基准测试中表…...
VCS编译SystemVerilog时,那个‘-P’选项你加对了吗?详解Verdi PLI配置
VCS编译SystemVerilog时,那个‘-P’选项你加对了吗?详解Verdi PLI配置 在芯片验证的日常工作中,VCSVerdi的组合堪称黄金搭档。但当你满怀信心地敲下编译命令,却发现怎么也生成不了关键的fsdb波形文件时,那种挫败感简直…...
LongCat-Video:AI视频生成技术的范式突破与实践指南
LongCat-Video:AI视频生成技术的范式突破与实践指南 【免费下载链接】LongCat-Video 项目地址: https://ai.gitcode.com/hf_mirrors/meituan-longcat/LongCat-Video 在数字内容创作领域,AI视频生成技术正经历从实验性探索到产业化应用的关键转折…...
终极窗口置顶指南:如何让重要窗口永远不被遮挡
终极窗口置顶指南:如何让重要窗口永远不被遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop AlwaysOnTop 是一个轻量级的 Windows 应用程序,它能够将任…...
如何快速解决AMD Ryzen系统调试问题:SMUDebugTool完整使用指南
如何快速解决AMD Ryzen系统调试问题:SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...
3步搞定B站4K视频下载:开源工具bilibili-downloader终极指南
3步搞定B站4K视频下载:开源工具bilibili-downloader终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想要免费下载…...
【计算机架构】RISC-V:开源精简指令集如何重塑未来芯片设计
1. RISC-V:开源指令集的革命性突破 我第一次接触RISC-V是在2014年,当时这个开源指令集还只是学术界的一个研究项目。谁能想到短短几年后,它已经成为改变芯片设计行业的颠覆性力量。与ARM、x86等传统商业架构不同,RISC-V最吸引我的…...
终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文
终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文 【免费下载链接】text2vec-base-chinese 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/text2vec-base-chinese 还在为中文文本相似度计算而烦恼吗?text2vec-base-c…...
