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.pswp.cn/diannao/77304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77304.shtml
英文地址,請注明出處:http://en.pswp.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…