React 列表渲染

开发环境:React+ts+antd
你可能经常需要通过 JavaScript 的数组方法 来操作数组中的数据,从而将一个数据集渲染成多个相似的组件。在这篇文章中,你将学会如何在 React 中使用 filter() 筛选需要渲染的组件和使用 map() 把数组转换成组件数组。

1.如何通过 JavaScript 的 map() 方法从数组中生成组件
2. 如何通过 JavaScript 的 filter()筛选需要渲染的组件
3. 何时以及为何使用 React 中的 key

从数组中渲染数据

import React from "react";const people = [{id: 0,name: '凯瑟琳·约翰逊',profession: '数学家',},{id: 1,name: '马里奥·莫利纳',profession: '化学家',},{id: 2,name: '穆罕默德·阿卜杜勒·萨拉姆',profession: '物理学家',},{id: 3,name: '珀西·莱温·朱利亚',profession: '化学家',},{id: 4,name: '苏布拉马尼扬·钱德拉塞卡',profession: '天体物理学家',},
];const App: React.FC = () => {const listItems = people.map(person =><li>{person.name} : {person.profession}</li>);return <ul>{listItems}</ul>;
}
export default App;

运行结果如下:
在这里插入图片描述

JavaScript 的 filter()筛选需要渲染的组件

现在,假设你只想在屏幕上显示职业是 化学家 的人。那么你可以使用 JavaScript 的 filter() 方法来返回满足条件的项。这个方法会让数组的子项经过 “过滤器”(一个返回值为 true 或 false 的函数)的筛选,最终返回一个只包含满足条件的项的新数组。

import React from "react";const people = [{id: 0,name: '凯瑟琳·约翰逊',profession: '数学家',},{id: 1,name: '马里奥·莫利纳',profession: '化学家',},{id: 2,name: '穆罕默德·阿卜杜勒·萨拉姆',profession: '物理学家',},{id: 3,name: '珀西·莱温·朱利亚',profession: '化学家',},{id: 4,name: '苏布拉马尼扬·钱德拉塞卡',profession: '天体物理学家',},
];const App: React.FC = () => {const chemists = people.filter(person =>person.profession === '化学家');const listItems = chemists.map(person =><li>{person.name} : {person.profession}</li>);return <ul>{listItems}</ul>;
}
export default App;

注意

因为箭头函数会隐式地返回位于 => 之后的表达式,所以你可以省略 return 语句。

const listItems = chemists.map(person =><li>...</li> // 隐式地返回!
);

不过,如果你的 => 后面跟了一对花括号 { ,那你必须使用 return 来指定返回值!

const listItems = chemists.map(person => { // 花括号return <li>...</li>;
});

箭头函数 => { 后面的部分被称为 “块函数体”,块函数体支持多行代码的写法,但要用 return 语句才能指定返回值。假如你忘了写 return,那这个函数什么都不会返回!

运行结果:
在这里插入图片描述

在这里插入图片描述

此时控制台报错是因为我在li标签处未加上key值,当我加上key值后

<li key={person.id}>{person.name} : {person.profession}</li>

控制台就不会报错了

用 key 保持列表项的顺序

注意
直接放在 map() 方法里的 JSX 元素一般都需要指定 key 值!

这些 key 会告诉 React,每个组件对应着数组里的哪一项,所以 React 可以把它们匹配起来。这在数组项进行移动(例如排序)、插入或删除等操作时非常重要。一个合适的 key 可以帮助 React 推断发生了什么,从而得以正确地更新 DOM 树。

如何设定 key 值

不同来源的数据往往对应不同的 key 值获取方式:
来自数据库的数据: 如果你的数据是从数据库中获取的,那你可以直接使用数据表中的主键,因为它们天然具有唯一性。
本地产生数据: 如果你数据的产生和保存都在本地(例如笔记软件里的笔记),那么你可以使用一个自增计数器或者一个类似 uuid 的库来生成 key。

key 需要满足的条件
key 值在兄弟节点之间必须是唯一的。 不过不要求全局唯一,在不同的数组中可以使用相同的 key。
key 值不能改变,否则就失去了使用 key 的意义!所以千万不要在渲染时动态地生成 key。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题DAY11(动态规划-线性DP)

一、最长上升子序列 300. 最长递增子序列 &#xff08;一&#xff09;初版代码 class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();vector<int> f(n 1, 1); //初始化为1&#xff0c;因为每个数至少可以作为一个单独的序列in…

DFS--

数字的全排列 #include <bits/stdc.h> using namespace std;//最大的排列数目 const int N10; int n; //存储排列的路径 int path[N]; //标记数字是否已经被使用 bool st[N];void dfs(int u){//到达递归边界&#xff0c;输出一个排列if(un){//输出循环for(int i0; i<…

栈与队列及其基础应用

一.栈 1.栈的定义 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。其结构可以参考羽毛…

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0

openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0 1、配置 yum 华为源2、安装依赖3、源码安装 openssl 1.0.1u3.1、openssl 1.1.1 降级到 openssl 1.0.1 4、源码安装 python 2.75、使用 pip3 安装 Python 相关依赖6、编译安装 Greenplum-db 6.20.06.1、修改配置6.2、基于…

机器学习02——概要

一、简介 机器学习是一门在没有明确编程的情况下让计算机学习的科学。 监督学习是有目标的&#xff0c;输入数据对应明确的输出&#xff1b;无监督学习则是“探索”型的&#xff0c;模型的目标是从数据中发现潜在的模式或结构&#xff0c;而不需要预先知道标签。 二、机器学…

swift-08-属性、汇编分析inout本质

一、Swift中跟实例相关的属性可以分为2大类 1.1 存储属性&#xff08; Stored Property&#xff09; 类似于成员变量这个概念 存储在实例的内存中 结构体、类可以定义存储属性 枚举不可以定义存储属性&#xff08;因为枚举只存储关联值和case&#xff09; 1.2 计算属性&am…

【HarmonyOS Next之旅】DevEco Studio使用指南(十二)

目录 1 -> Code Linter代码检查 2 -> 配置代码检查规则 3 -> 查看/处理代码检查结果 1 -> Code Linter代码检查 Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查。 可根据扫描结果中告警提示手工修复代码缺陷&#xff0c;或者执行一键式自动修复…

前端vue项目打包成桌面端exe应用

主要 使用 Electron将 vue项目打包为 exe 1.首先下载Electron git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install安装完依赖之后 npm start运行成功 注意&#xff1a;如果你的项目使用了VueRouter&#xff0c;那么切记&…

基于springcloud的“微服务架构的巡游出租管理平台”的设计与实现(源码+数据库+文档+PPT)

基于springcloud的“微服务架构的巡游出租管理平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;springcloud 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 E-R实体关系图…

新一代达梦官方管理工具SQLark:可视化建表操作指南

在数据库管理工作中&#xff0c;新建表是一项基础且频繁的操作。SQLark 的可视化建表功能为我们提供了一种高效、便捷且丝滑流畅的建表新体验。一起来了解下吧。 SQLark 官方下载链接&#xff1a;www.sqlark.com 新建表作为常见的功能&#xff0c;相比其他管理工具&#xff0c;…

Scala相关知识学习总结6

1、集合计算高级函数说明 - 过滤&#xff1a;遍历集合&#xff0c;提取满足特定条件的元素组成新集合。 - 转化/映射&#xff08;map&#xff09;&#xff1a;将集合里的每个元素应用到指定函数进行转换。 - 扁平化&#xff1a;文档未详细阐述其具体含义和操作。 - 扁平化映射&…

pandas.DataFrame.dtypes--查看和验证 DataFrame 列的数据类型!

查看每列的数据类型&#xff0c;方便分析是否需要数据类型转换 property DataFrame.dtypes[source] Return the dtypes in the DataFrame. This returns a Series with the data type of each column. The result’s index is the original DataFrame’s columns. Columns with…

计算机中的单位

在计算机科学中&#xff0c;单位用于衡量数据存储、内存、数据传输速率等。以下是一些常见的计算机单位及其含义&#xff1a; ### **1. 数据存储单位** 数据存储单位用于衡量计算机存储设备&#xff08;如硬盘、内存、闪存等&#xff09;的容量。 | 单位 | 符号 | 含义…

Spring Boot 自定义配置类(包含字符串、数字、布尔、小数、集合、映射、嵌套对象)实现步骤及示例

Spring Boot 自定义配置类实现步骤及示例 步骤说明 创建配置类&#xff1a;定义一个 POJO 类&#xff0c;使用 ConfigurationProperties 注解指定配置前缀。启用配置绑定&#xff1a;在启动类或配置类上添加 EnableConfigurationProperties 注解。配置文件写法&#xff1a;在 …

Linux: 线程控制

目录 一 前言 二 线程控制 1. POSIX线程库(原生线程库) 2. 创建线程 2.1 pthread_create 2.2pthread_self()获取线程id 3.线程终止 3.1.return 方式 3.2 pthread_exit 4 线程等待 三 理解线程tid 一 前言 在上一篇文章中我们已经学习了线程的概念&#xff0c;线程的创…

避开养生误区,拥抱健康生活

在追求健康的道路上&#xff0c;我们常常会陷入一些养生误区&#xff0c;不仅无法达到预期效果&#xff0c;还可能损害身体健康。只有拨云见日&#xff0c;认清这些误区&#xff0c;采取正确的养生方式&#xff0c;才能真正拥抱健康生活。​ 很多人认为&#xff0c;保健品吃得…

<数据集>苹果识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/90585216数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;535张 标注数量(xml文件个数)&#xff1a;535 标注数量(txt文件个数)&#xff1a;535 标注类别数&#xff1a;2 标注类别名称&#xff1a;…

【补题】P10424 [蓝桥杯 2024 省 B] 好数(数位dp)

题意&#xff1a; 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位……&#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位……&#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。 给定一个正整数 N…

分布式存储怎样提高服务器数据的安全性?

分布式存储是一种计算机数据存储架构&#xff0c;主要是将数据信息分布存储在多台计算机或者是服务器上&#xff0c;以此来实现高可靠性、可扩展性和高性能&#xff0c;让每个计算机或服务器可以通过网络连接相互通信和协作。 分布式存储系统会定期对重要的数据信息进行完整性检…

数字IC后端培训教程系列之PR Innovus工具写出Calibre LVS用的Netlist详细步骤

在数字IC后端设计实现chipfinish阶段需要写出很多数据&#xff0c;比如netlist&#xff0c;def&#xff0c;gds&#xff0c;lib和lef等文件。 今天给大家分享PR工具Innovus写出Calibre物理验证LVS要用的netlist的详细步骤。 手把手教你debug解决物理验证Calibre LVS错误 1&a…