React從基礎入門到高級實戰:React 基礎入門 - 列表渲染與條件渲染

列表渲染與條件渲染

在 React 開發中,列表渲染條件渲染 是處理動態數據和用戶交互的基礎技術。通過列表渲染,你可以根據數據動態生成 UI 元素;而條件渲染則讓你根據特定條件展示不同的內容。這兩個技能在實際項目中非常常見,比如展示產品列表或根據用戶登錄狀態顯示不同界面。

本文將深入講解如何在 React 中實現列表渲染和條件渲染,并提供代碼示例和實踐指導。無論你是初學者還是想復習基礎知識,這篇教程都將為你提供清晰且實用的內容。


1. 列表渲染

列表渲染是指根據數據數組生成一組 JSX 元素的過程。在 React 中,通常使用 JavaScript 的 map 函數來實現。

1.1 基本用法

假設你有一個任務列表的數據:

const tasks = [{ id: 1, text: '學習 React' },{ id: 2, text: '練習 JSX' },{ id: 3, text: '掌握 Hooks' }
];

你可以用 map 函數將這個數組渲染為一個列表:

function TaskList() {return (<ul>{tasks.map(task => (<li key={task.id}>{task.text}</li>))}</ul>);
}
  • tasks.map 將每個任務對象轉換為一個 <li> 元素。
  • key={task.id} 為每個列表項指定一個唯一標識。
1.2 key 屬性的重要性

key 是 React 中的特殊屬性,用于幫助 React 高效地更新 DOM。它在列表渲染中必不可少。

  • 為什么需要 key:React 用 key 來追蹤每個元素的變化,確保只更新必要的部分。
  • 要求key 必須在同級元素中唯一且穩定。
  • 錯誤示例:使用數組索引作為 key(如 key={index})在動態列表中可能導致問題,因為索引會隨列表變化而改變。
  • 正確做法:使用數據中的唯一標識符,如 id

示例

// 錯誤:使用索引作為 key
{tasks.map((task, index) => (<li key={index}>{task.text}</li>
))}// 正確:使用唯一 ID
{tasks.map(task => (<li key={task.id}>{task.text}</li>
))}

2. 條件渲染

條件渲染是指根據條件控制 UI 元素的顯示。React 沒有專門的條件渲染語法,而是利用 JavaScript 的條件語句。

2.1 使用 if-else

在函數外部使用 if-else 判斷:

function Welcome({ isLoggedIn }) {if (isLoggedIn) {return <p>歡迎回來!</p>;} else {return <p>請登錄。</p>;}
}
2.2 使用三元運算符

在 JSX 中使用三元運算符,適合簡單條件:

function UserStatus({ isLoggedIn }) {return (<div>{isLoggedIn ? <p>歡迎回來!</p> : <p>請登錄。</p>}</div>);
}
2.3 使用邏輯運算符

&& 運算符在條件為 true 時渲染內容:

function Alert({ hasUpdate }) {return (<div>{hasUpdate && <p>有新更新!</p>}</div>);
}
  • 如果 hasUpdate 為 false,則什么都不渲染。
2.4 返回 null 隱藏內容

通過返回 null 完全不渲染組件:

function SecretMessage({ show }) {if (!show) return null;return <p>這是一個秘密消息。</p>;
}

3. 實際應用:任務列表

讓我們結合列表渲染和條件渲染,創建一個簡單的任務列表應用,支持標記任務完成和過濾已完成任務。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>任務列表</title><script src="https://cdn.jsdelivr.net/npm/react@18.2.0/umd/react.development.js"></script><script src="https://cdn.jsdelivr.net/npm/react-dom@18.2.0/umd/react-dom.development.js"></script><script src="https://cdn.jsdelivr.net/npm/babel-standalone@6.26.0/babel.min.js"></script><script src="https://cdn.tailwindcss.com"></script>
</head>
<body><div id="root" class="p-4"></div><script type="text/babel">function TodoApp() {const [todos, setTodos] = React.useState([{ id: 1, text: '學習 React', completed: false },{ id: 2, text: '練習 JSX', completed: true },{ id: 3, text: '掌握 Hooks', completed: false }]);const [showCompleted, setShowCompleted] = React.useState(true);const toggleCompleted = (id) => {setTodos(todos.map(todo =>todo.id === id ? { ...todo, completed: !todo.completed } : todo));};const filteredTodos = showCompleted? todos: todos.filter(todo => !todo.completed);return (<div className="max-w-md mx-auto"><h1 className="text-2xl font-bold mb-4">任務列表</h1><label className="flex items-center mb-4"><inputtype="checkbox"checked={showCompleted}onChange={() => setShowCompleted(!showCompleted)}className="mr-2"/>顯示已完成任務</label><ul className="space-y-2">{filteredTodos.map(todo => (<likey={todo.id}className="flex justify-between items-center p-2 bg-gray-100 rounded"><spanstyle={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>{todo.text}</span><buttononClick={() => toggleCompleted(todo.id)}className="px-2 py-1 bg-blue-500 text-white rounded hover:bg-blue-600">{todo.completed ? '標記未完成' : '標記完成'}</button></li>))}</ul></div>);}const root = ReactDOM.createRoot(document.getElementById('root'));root.render(<TodoApp />);</script>
</body>
</html>

4. 如何運行
  1. 將以上代碼保存為 index.html 文件。
  2. 在瀏覽器中打開該文件,你將看到一個任務列表。
  3. 你可以:
    • 點擊按鈕切換任務的完成狀態。
    • 勾選或取消勾選“顯示已完成任務”來過濾列表。

5. 總結

通過這篇教程,你學習了:

  • 如何使用 map 進行列表渲染并正確設置 key
  • 如何通過 if-else、三元運算符和邏輯運算符實現條件渲染
  • 如何結合兩者構建一個簡單的任務列表應用。

這些技能是 React 開發的基礎,掌握它們將幫助你更自信地構建動態和交互式的界面。下一篇文章將深入學習React的工作原理:虛擬 DOMDiff 算法,敬請期待!

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

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

相關文章

在Java的list.forEach(即 Stream API 的 forEach 方法)中,無法直接使用 continue 或 break 語句的解決辦法

說明 在 Java 的 list.forEach&#xff08;即 Stream API 的 forEach 方法&#xff09;中&#xff0c;無法直接使用 continue 或 break 語句&#xff0c;因為它是一個終結操作&#xff08;Terminal Operation&#xff09;&#xff0c;依賴于 Lambda 表達式或方法引用。 有些時…

(7)Spring 6.x 響應式編程模型

Spring 6.x 響應式編程模型 ?? 點擊展開題目 Spring 6.x中的響應式編程模型與傳統的Servlet模型相比有哪些優勢?如何實現兩者的無縫遷移? ?? Spring 6.x 響應式編程模型概述 Spring 6.x 中的響應式編程模型基于 Project Reactor 構建,采用非阻塞、事件驅動的架構,通過…

排序和排列——藍橋杯備考

1.十大排序算法 本次用下面的例題詳解這十種排序算法 題目描述 將讀入的 N 個數從小到大排序后輸出。 輸入格式 第一行為一個正整數 N。 第二行包含 N 個空格隔開的正整數 ai?&#xff0c;為你需要進行排序的數。 輸出格式 將給定的 N 個數從小到大輸出&#xff0c;數之間空格…

C# 高效讀取大文件

在 C# 中高效讀取大文件時&#xff0c;需根據文件類型和場景選擇不同的技術方案&#xff0c;以下為綜合實踐方法及注意事項&#xff1a; 一、文本文件讀取方案 逐行讀取 StreamReader.ReadLine?&#xff1a;通過流式處理逐行加載文本&#xff0c;避免一次性加載整個文件到內…

深度學習模型可視化:Netron的安裝和使用

文章目錄 Netron簡介Netron加載模型類型Netron使用方式Netron功能介紹完整案例總結 Netron簡介 Netron是一個支持PyTorch的可視化工具&#xff0c;它的開發者是微軟的Lutz Roeder&#xff0c;操作簡單快捷&#xff0c;就像保存文件、打開文件一樣&#xff0c;簡單高效。Netron…

pytorch LSTM 結構詳解

最近項目用到了LSTM &#xff0c;但是對LSTM 的輸入輸出不是很理解&#xff0c;對此&#xff0c;我詳細查找了lstm 的資料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…

AUTOSAR AP 入門0:AUTOSAR_EXP_PlatformDesign.pdf

AUTOSAR AP官網&#xff1a;AUTOSAR Adaptive Platform設計AUTOSAR AP的目的&#xff0c;翻譯版官方文檔 AUTOSAR_EXP_PlatformDesign.pdf &#xff1a; https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …

零碳辦會新范式!第十屆國際貿易發展論壇——生物能源和可持續發展專場,在京舉辦

2025年5月16日&#xff0c;第十屆國際貿易發展論壇在北京國際飯店盛大啟幕。本屆論壇由北京綠林認證有限公司主辦。作為匯聚行業智慧、引領發展方向的盛會&#xff0c;國際貿易發展論壇每兩年一屆&#xff0c;本次會議是第十屆&#xff0c;至今已走過近20年光輝歷程。多年來&am…

ECharts圖表工廠,完整代碼+思路邏輯

Echart工廠支持柱狀圖&#xff08;bar&#xff09;折線圖&#xff08;line&#xff09;散點圖&#xff08;scatter&#xff09;餅圖&#xff08;pie&#xff09;雷達圖&#xff08;radar&#xff09;極坐標柱狀圖&#xff08;polarBar&#xff09;和極坐標折線圖&#xff08;po…

如何制作令人印象深刻的UI設計?

1. 規劃用戶旅程 規劃用戶旅程是創建高效且吸引人的UI設計的第一步。設計師需要深入了解目標用戶群體的需求和行為模式&#xff0c;這通常涉及用戶調研、創建用戶角色&#xff08;Personas&#xff09;和繪制用戶旅程圖&#xff08;User Journey Maps&#xff09;。通過這種方…

k8s 離線安裝 kube-prometheus-stack

配置共享存儲 Prometheus 需要配置持久化存儲&#xff0c;防止數據丟失 服務端 服務端安裝 NFS 服務 sudo apt install nfs-kernel-server 創建共享目錄&#xff0c;在服務器端創建 /nfs 目錄。 mkdir /nfs chmod -R 777 /nfs # 設置文件權限 nfs目錄下只給了默認權限&#xff…

ceph osd 磁盤分區對齊

分區對齊可以提高讀寫速度的原理是什么 分區對齊可以提高磁盤讀寫速度的原理主要在于 磁盤的物理扇區大小與操作系統發起的讀寫請求之間是否對齊。如果不對齊,每次讀寫操作可能會跨越多個物理扇區,造成額外的 I/O 操作,從而降低性能。 ?? 原理詳解 1. 物理扇區(Physica…

Simon J.D. Prince《Understanding Deep Learning》

學習神經網絡和深度學習推薦這本書&#xff0c;這本書站位非常高&#xff0c;且很多問題都深入剖析了&#xff0c;甩其他同類書籍幾條街。 多數書&#xff0c;不深度分析、沒有知識體系&#xff0c;知識點零散、章節之間孤立。還有一些人Tian所謂的權威&#xff0c;醒醒吧。 …

【泛微系統】后端開發Action常用方法

后端開發Action常用方法 代碼實例經驗分享:代碼實例 經驗分享: 本文分享了后端開發中處理工作流Action的常用方法,主要包含以下內容:1) 獲取工作流基礎信息,如流程ID、節點ID、表單ID等;2) 操作請求信息,包括請求緊急程度、操作類型、用戶信息等;3) 表單數據處理,展示…

SSH的screen方法

創建一個screen窗口&#xff0c;&#xff08;在需要運行程序的文件夾內&#xff09;使用 screen -S name 命令&#xff0c;其中 name 是窗口的名字。 在窗口中執行需要的命令。 當需要臨時離開時&#xff0c;使用快捷鍵 ctrlA D 回來時&#xff0c;使用 screen -r name 恢復…

無法訪問org.springframework.boot.SpringApplication

無法訪問org.springframework.boot.SpringApplication 檢查springboot和jdk的版本是否適配檢查jdk的設置是否統一 主要檢查下面幾處地方

洛谷 P1800 software(DP+二分)【提高+/省選?】

題目鏈接 https://www.luogu.com.cn/problem/P1800 思路 對于大于等于最優解的天數&#xff0c;一定能使公司交付軟件。對于小于最優解的天數&#xff0c;一定無法使公司交付軟件。所以考慮二分答案 x x x。 定義 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i個人做了 j j j…

C++性能測試工具——sysprof的使用

一、sysprof sysprof相對于前面的一些性能測試工具來說&#xff0c;要簡單不少。特別是其圖形界面的操作&#xff0c;非常容易上手&#xff0c;它還支持分析文件的保存和導入功能&#xff0c;這是一個非常不錯的功能。做為一款系統性能測試工具&#xff0c;它支持多種硬件平臺…

redis數據持久化和配置-15(備份和還原 Redis 數據)

備份和還原 Redis 數據 備份和恢復數據是管理任何數據庫系統&#xff08;包括 Redis&#xff09;的關鍵方面。數據丟失可能是由于硬件故障、軟件錯誤、意外刪除甚至惡意攻擊而發生的。因此&#xff0c;擁有強大的備份和恢復策略對于確保數據持久性和業務連續性至關重要。本課將…

【上位機——WPF】布局控件

布局控件 常用布局控件Panel基類Grid(網格)UniformGrid(均勻分布)StackPanel(堆積面板)WrapPanel(換行面板)DockerPanel(停靠面板)Canvas(畫布布局)Border(邊框)GridSplitter(分割窗口)常用布局控件 Grid:網格,根據自定義行和列來設置控件的布局StackPanel:棧式面板,包含的…