React 列表渲染基礎示例

React 中最常見的一個需求就是「把一組數據渲染成一組 DOM 元素」,比如一個列表。下面是我寫的一個最小示例,目的是搞清楚它到底是怎么工作的。

示例代碼

// 定義一個靜態數組,模擬后續要渲染的數據源
// 每個對象代表一個前端框架,注意一定要有唯一的 id
const list = [{ id: 1001, name: 'Vue' },{ id: 1002, name: 'React' },{ id: 1003, name: 'Angular' }
]// 定義一個函數式組件 App,React 推薦使用函數組件
function App() {return (<div className="App">{/* 這是組件的基本結構,先寫個提示文本 */}this is App{/* 下面這個列表是重點,動態渲染 list 數據 */}<ul>{// 用 map 把每個數據項轉成一個 <li> 元素// 注意:一定要加 key,React 需要這個 key 來區分每一項list.map(item => (<li key={item.id}>{item.name}</li>))}</ul></div>)
}// 別忘了把組件導出去,不然在其他文件里用不了
export default App

理解重點(寫給自己看的)

1. 為什么要加 key

React 在渲染列表時,靠 key 來識別每一項。如果沒有 key,它在對比新舊節點時會不清楚哪個該更新、哪個該刪除,會導致性能低下或者奇怪的渲染 bug。最保險的做法就是用數據庫里自帶的 id

2. 為什么用 map

因為 map 可以把原始數組“轉換”為另一種形式。在這里,我們把對象轉成 <li> 元素,它剛好就是我們想要的結構。

3. JSX 中變量必須寫在 {}

比如 {item.name},這是 JSX 的基本語法。哪怕只是變量,也必須包在大括號中,不然它會被當作字符串來處理。

4. className 而不是 class

這是 React 的一處設計細節:因為 class 是 JavaScript 的保留字,所以 React 用 className 來代替 HTML 的 class


這一小段代碼雖然簡單,但本質上已經覆蓋了 React 列表渲染的基礎。每次寫 map 渲染列表時,我都會回頭看一下這段例子,確保自己沒有遺漏關鍵點。

下次我想試試給每一項加點擊事件,比如高亮或者刪除,思路其實也很清晰:加一個 onClick 就可以了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79513.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NHANES指標推薦:CMI

文章題目&#xff1a;Association between cardiometabolic index and biological ageing among adults: a population-based study DOI&#xff1a;10.1186/s12889-025-22053-3 中文標題&#xff1a;成年人心臟代謝指數與生物衰老之間的關系&#xff1a;一項基于人群的研究 發…

QT調用ffmpeg庫實現視頻錄制

可以通過QProcess調用ffmpeg命令行,也可以直接調用ffmpeg庫,方便。 調用庫 安裝ffmpeg ffmpeg -version 沒裝就裝 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入庫路徑,引入庫 LIBS += -L/usr/lib/aarch64-l…

消息中間件——RocketMQ(二)

前言&#xff1a;此篇文章系本人學習過程中記錄下來的筆記&#xff0c;里面難免會有不少欠缺的地方&#xff0c;誠心期待大家多多給予指教。 RocketMQ&#xff08;一&#xff09; 接上期內容&#xff1a;上期完成了RocketMQ單機部署知識。下面學習RocketMQ集群相關知識&#xf…

pyqt環境配置

文章目錄 1 概述2 PyQt6和PySide6區別3 環境配置4 配置PySide65 配置PyQt66 配置外部工具7 添加模板8 使用pyside6-project構建工程9 常見錯誤10 相關地址 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;Qt開發 &#x1f448;&#x1f449;python開發 &#x1…

金融數據庫轉型實戰讀后感

榮幸收到老友太保科技有限公司數智研究院首席專家林春的簽名贈書。 這是國內第一本關于OceanBase數據庫實際替換過程總結的的實戰書。打個比方可以說是從戰場上下來分享戰斗經驗。讀后感受頗深。我在這里講講我的感受。 第三章中提到的應用改造如何降本。應用改造是國產化替換…

旅游資源網站登錄(jsp+ssm+mysql5.x)

旅游資源網站登錄(jspssmmysql5.x) 旅游資源網站是一個為旅游愛好者提供全面服務的平臺。網站登錄界面簡潔明了&#xff0c;用戶可以選擇以管理員或普通用戶身份登錄。成功登錄后&#xff0c;用戶可以訪問個人中心&#xff0c;進行修改密碼和個人信息管理。用戶管理模塊允許管…

STM32 HAL庫之WDG示例代碼

獨立看門狗&#xff08;IWDG&#xff09; 在規定時間內按按鍵喂狗并將LED關閉&#xff0c;若產生看門狗復位則LED打開 初始化獨立看門狗&#xff0c;在main.c中的 MX_IWDG_Init();&#xff0c;也就是iwdg.c中的初始化代碼 void MX_IWDG_Init(void) {/* USER CODE BEGIN IWDG…

【第47節】windows程序的其他反調試手段下篇

目錄 一、利用Hardware Breakpoints Detection 二、PatchingDetection - CodeChecksumCalculation 補丁檢測&#xff0c;代碼檢驗和 三、block input 封鎖鍵盤、鼠標輸入 四、使用EnableWindow 禁用窗口 五、利用ThreadHideFromDebugger 六、使用Disabling Breakpoints 禁…

【筆記ing】AI大模型-03深度學習基礎理論

神經網絡&#xff1a;A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神經網絡是神經元的網絡或回路&#xff0c;或者在現在意義上來說&#xff0c;是一個由人工神經元或節…

基于Djiango實現中藥材數據分析與可視化系統

中藥材數據分析與可視化系統 項目截圖 登錄 注冊 首頁 藥材Top20 藥材價格 產地占比 歷史價格 新聞資訊 后臺管理 一、項目概述 中藥材數據分析與可視化系統是一個基于Django框架開發的專業Web應用&#xff0c;致力于對各類中藥材數據進行全面、系統的采集、分析和可視化展示…

【AI飛】AutoIT入門七(實戰):python操控autoit解決csf視頻批量轉換(有點難,AI都不會)

背景&#xff1a; 終極目標&#xff1a;通過python調用大模型&#xff0c;獲得結果&#xff0c;然后根據返回信息&#xff0c;控制AutoIT操作電腦軟件&#xff0c;執行具體工作。讓AI更具有執行力。 已完成部分&#xff1a; 關于python調用大模型的&#xff0c;可以參考之前的…

leetcode 188. Best Time to Buy and Sell Stock IV

目錄 題目描述 第一步&#xff0c;明確并理解dp數組及下標的含義 第二步&#xff0c;分析明確并理解遞推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步&#xff0c;理解dp數組如何初始化 第四步&#xff0c;理解遍歷順序 代碼 題目描述 這道題把第123題推廣為一…

【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

【筆記】【C】【基礎語法】作用域&#xff08;scope&#xff09;、持續時間&#xff08;duration&#xff09;和鏈接&#xff08;linkage&#xff09; 最近正在復習學習C&#xff08;查漏補缺ing&#xff09;。記錄一下學習所得。希望能將所學都整理成一系列的筆記和博客。優先…

Yarn的安裝及環境配置

### Yarn 安裝教程及環境配置步驟 #### 1. 檢查 Node.js 是否已安裝 在安裝 Yarn 前&#xff0c;需確認系統中已經安裝了 Node.js。可以通過以下命令驗證其是否存在并獲取版本號&#xff1a; bash node -v 如果未安裝&#xff0c;則需要先完成 Node.js 的安裝。 --- #### 2…

day2-小白學習JAVA---java第一個程序

java第一個程序 1、新建一個文件&#xff0c;以.java為結尾2、用編輯器打開后寫入代碼&#xff08;本人寫前端&#xff0c;所以用vscode&#xff0c;也可用其他&#xff09;3、編譯文件4、運行文件5、HelloWorld代碼解釋6、文檔注釋 1、新建一個文件&#xff0c;以.java為結尾 …

docker部署springboot(eureka server)項目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

解讀《人工智能指數報告 2025》:洞察 AI 發展新態勢

美國斯坦福大學 “以人為本人工智能研究院”&#xff08;HAI&#xff09;近日發布的第八版《人工智能指數報告》&#xff08;AI Index Report 2025&#xff09;備受全球矚目。自 2017 年首次發布以來&#xff0c;該報告一直為政策制定者、研究人員、企業高管和公眾提供準確、嚴…

OpenGauss 數據庫介紹

OpenGauss 數據庫介紹 OpenGauss 是華為基于 PostgreSQL 開發的企業級開源關系型數據庫&#xff0c;現已成為開放原子開源基金會的項目。以下是 OpenGauss 的詳細介紹&#xff1a; 一 核心特性 1.1 架構設計亮點 特性說明優勢多核并行NUMA感知架構充分利用現代CPU多核性能行…

使用Trae CN分析項目架構

架構分析后的截圖 A區是打開的項目、B區是源碼區、C區是AI給出當前項目的架構分析結果。 如何用 Trae CN 快速學習 STM32 嵌入式項目架構 在嵌入式開發領域&#xff0c;快速理解現有項目的架構是一項關鍵技能。Trae CN 作為一款強大的分析工具&#xff0c;能幫助開發者高效剖…

MCP協議量子加密實踐:基于QKD的下一代安全通信(2025深度解析版)

一、量子計算威脅的范式轉移與MCP協議改造必要性 1.1 傳統加密體系的崩塌時間表 根據IBM 2025年量子威脅評估報告&#xff0c;當量子計算機達到4000個邏輯量子比特時&#xff08;預計2028年實現&#xff09;&#xff0c;現有非對稱加密體系將在72小時內被完全破解。工業物聯網…