React JSX 語法講解

🚀 React JSX 語法講解

1. 課程概述

本課程旨在系統講解 JSX(JavaScript XML) 的核心概念與實戰應用。JSX 是 React 的核心語法擴展,它允許我們在 JavaScript 中編寫類似 HTML 的結構,使得構建用戶界面變得直觀和高效。通過本課程,學生將從理解 JSX 的本質出發,逐步掌握其語法規則、表達能力、與 HTML 的差異,最終能夠熟練運用 JSX 構建動態、可復用的 React 組件。

2. 知識目標與實例佐證

知識目標具體內容與實例佐證對應代碼示例(簡略)
理解 JSX 的本質與編譯原理JSX 是 JavaScript 的語法擴展,不是字符串也不是 HTML,最終會被編譯(如通過 Babel)為 React.createElement() 函數調用。const element = <h1>Hello, JSX!</h1>; 編譯為: React.createElement('h1', null, 'Hello, JSX!');
掌握 JSX 的核心語法規則- 標簽必須閉合<img />
- 屬性名使用 camelCaseclassName(代替 class),htmlFor(代替 for), onClick
- 必須有一個根元素:用 <div><>(Fragment)包裹。
<div className="container"><label htmlFor="name">Name:</label><img src="..."/></div>
理解 JSX 中的表達式與語句使用 {} 嵌入任何 JavaScript 表達式(變量、函數調用、運算、三元表達式等),但不能嵌入語句(如 if, for)。const name = 'Alice';
const element = <p>Hello, {name}! It's {new Date().toLocaleTimeString()}</p>;
{isLoggedIn ? <LogoutButton /> : <LoginButton />}
認識 JSX 與 HTML 的關鍵差異- JSX 是 JavaScript 的語法擴展,最終會轉換為 JavaScript 對象。
- 一些 HTML 屬性或標簽在 JSX 中可能不適用(如 <script><style> 需謹慎使用)。
- JSX 允許添加自定義行為(如事件處理函數)和通過屬性傳遞數據。
<button onClick={() => alert('Clicked!')}>Click Me</button>
<Welcome name="Alice" />
了解虛擬DOM與JSX的關系JSX 更像是描述 React 元素(虛擬DOM節點)結構和屬性的“藍圖”或“模板”。React 使用 JSX 來高效地創建和更新虛擬 DOM,然后通過對比(diffing)來決定如何最有效地更新真實 DOM。JSX 描述 UI 應該是什么樣子,而 React 負責將其高效地渲染和更新到頁面上。

3. 技能目標與實戰練習

技能目標具體實踐與實例佐證實戰代碼示例(僅供參考)
創建與渲染JSX元素能夠編寫基本的JSX元素,并在React組件中返回它們。function Greeting() { return <h1>Hello, World!</h1>; }
在JSX中嵌入表達式與進行運算熟練使用 {} 嵌入變量、對象屬性、函數調用結果和進行各種運算。function UserInfo({ user, score }) { return <p>User: {user.name}, Score: {score * 10}</p>; }
使用JSX進行條件渲染掌握使用三元表達式邏輯與(&&)運算符實現條件的條件渲染。function WelcomeMessage({ isLoggedIn, username }) { return ( <div> {isLoggedIn ? <h1>Welcome back, {username}!</h1> : <h1>Please log in.</h1>} {hasUnreadMessages && <p>You have unread messages!</p>} </div> ); }
使用JSX進行列表渲染掌握使用數組的 map() 方法渲染列表數據,并為每個列表項添加唯一的 key 屬性(通常使用數據id,而非索引)以提高渲染性能。function TodoList({ todos }) { return ( <ul> {todos.map(todo => ( <li key={todo.id}>{todo.text}</li> ))} </ul> ); }
在JSX中綁定事件與處理交互掌握為元素添加事件處理函數(如 onClick, onChange),注意使用駝峰命名傳遞函數引用(而非調用)。并能阻止默認事件行為。function Button() { function handleClick(e) { e.preventDefault(); alert('Clicked!'); } return <button onClick={handleClick}>Click Me</button>; }
組合使用JSX與組件構建界面能夠將JSX結構拆分為可復用的組件,并通過 props 向組件傳遞數據(包括基本類型、對象、數組甚至函數)來動態渲染內容。function App() { return ( <div> <Welcome name="Sara" /> <TodoList todos={todoItems} /> </div> ); }

4. 綜合實戰案例:簡易任務卡片列表

下面是一個融合了多項技能目標的實戰示例,您可以在課堂上引導學生實現:

// 任務卡片組件 - 接收props,條件渲染,內聯樣式
function TaskCard({ title, description, completed, onToggle }) {const cardStyle = {border: '1px solid #ddd',borderRadius: '8px',padding: '16px',margin: '10px 0',backgroundColor: completed ? '#e8f5e9' : '#f9f9f9'};return (<div style={cardStyle}><h3>{title}</h3><p>{description}</p><p>Status: {completed ? '? Completed' : '? Incomplete'}</p><button onClick={onToggle}>{completed ? 'Mark Incomplete' : 'Mark Complete'}</button></div>);
}// 主應用組件 - 狀態管理,列表渲染,傳遞props
function TaskBoard() {const [tasks, setTasks] = useState([{ id: 1, title: 'Learn JSX', description: 'Complete the JSX tutorial', completed: true },{ id: 2, title: 'Build a React App', description: 'Create your first component', completed: false },{ id: 3, title: 'Practice State Management', description: 'Understand useState hook', completed: false }]);const handleToggleTask = (taskId) => {setTasks(tasks.map(task =>task.id === taskId ? { ...task, completed: !task.completed } : task));};return (<div><h1>Task Board</h1>{/* 條件渲染:顯示未完成任務數量 */}<p><strong>{tasks.filter(t => !t.completed).length}</strong> tasks remaining</p>{/* 列表渲染:使用map和key */}<div>{tasks.map(task => (<TaskCardkey={task.id} // 必須提供唯一的keytitle={task.title}description={task.description}completed={task.completed}onToggle={() => handleToggleTask(task.id)} // 傳遞函數作為prop/>))}</div></div>);
}

案例技能點解析

  • 組件與PropsTaskCard 組件接收多個 props 來展示不同內容。
  • 條件渲染:根據 completed 狀態改變背景色和顯示文本。
  • 列表渲染與key:使用 map 渲染列表,并為每個 TaskCard 提供唯一 key
  • 事件處理:點擊按鈕觸發 onToggle 函數,更新父組件狀態。
  • State提升:狀態管理在父組件 TaskBoard 中,通過函數prop (handleToggleTask) 與子組件通信。
  • 內聯樣式:根據狀態動態計算樣式對象。
  • JSX表達式:在 {} 內進行計算和條件判斷。

5. 課后練習與挑戰

  1. 基礎練習:創建一個 UserProfile 組件,接受 nameagehobbies(數組)作為 props,并渲染出來。為愛好列表添加 key。
  2. 進階挑戰:在上述任務列表中添加新增任務的功能,并實現本地存儲(localStorage)持久化任務數據。
  3. 思考題:為什么在列表渲染中,使用數組索引 (index) 作為 key 在某些情況下可能會帶來問題?

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

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

相關文章

軟件安裝教程(四):在 Windows 上安裝與配置 MATLAB(超詳細)

文章目錄前言1. 安裝前準備&#xff08;必看&#xff09;2. 下載 MATLAB&#xff08;推薦在線安裝&#xff09;3. 在 Windows 上安裝&#xff08;詳細步驟&#xff09;4. 激活 MATLAB&#xff08;在線與離線&#xff09;5. 首次啟動與界面入門6. 推薦的基本配置&#xff08;讓環…

【運維自動化-標準運維】如何創建流程嵌套(子流程)

什么是子流程節點 標準運維里的流程節點有兩類&#xff1a;標準插件節點和子流程節點。子流程節點實際上也是一個流程&#xff0c;比如某個業務線做全網更新時需要更新多個模塊&#xff0c;那每個模塊的更新流程可以稱之為一個子流程。在總流程里直接添加子流程&#xff0c;就通…

clickhouse遷移工具clickhouse-copier

原來的集群沒有高可用而且配置很低&#xff0c;所有準備將一個3分片1副本集群遷到1分片2副本的高配置集群&#xff0c;數據量比較大。 雖然官方已經標記clickhouse-copier已經過時&#xff0c;但為了方便和高效還是用了copier&#xff0c;效果還挺好 以下是使用步驟&#xff1a…

高頻超聲波傳感器:以精準感知重塑未來科技生態

在智能制造的浪潮中&#xff0c;高頻超聲波傳感器正以“隱形工程師”的角色&#xff0c;重新定義著工業檢測、醫療診斷與環境監測的邊界。這款融合了壓電材料科學與微納電子技術的精密儀器&#xff0c;憑借其亞毫米級測量精度與納秒級響應速度&#xff0c;正在成為高端裝備制造…

殘差連接與歸一化結合應用

殘差連接&#xff08;Residual Connection / Skip Connection&#xff09;和歸一化&#xff08;Normalization&#xff09;的結合&#xff0c;是現代深度學習模型&#xff08;尤其是深度神經網絡和Transformer架構&#xff09;成功的關鍵因素之一。 核心概念回顧殘差連接 (Resi…

K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群

本文手把手演示了如何在 K8s Rancher 環境中快速拉起一套生產可用的 Apache DolphinScheduler 3.2.2 集群。全文圍繞“鏡像加速、依賴本地化、存儲持久化”三大痛點展開&#xff0c;附有詳細的代碼解析&#xff0c;收藏細看吧&#xff01; 環境準備 1、軟件準備2、環境規劃部署…

查詢語言的進化:SQL之后,為什么是GQL?數據世界正在改變

數據是現代世界的核心驅動力。 在數據驅動的世界里&#xff0c;查詢語言就像人與數據溝通的橋梁。 如何高效地獲取、操作和理解數據&#xff0c;取決于查詢語言的演進。 自20世紀70年代關系型數據庫興起以來&#xff0c;SQL&#xff08;Structured Query Language&#xff0…

AgentThink:一種在自動駕駛視覺語言模型中用于工具增強鏈式思維推理的統一框架

文章目錄摘要1. 引言2. 相關工作2.1 自動駕駛中的語言模型2.2 自動駕駛中的視覺問答3. 方法3.1 數據生成流水線3.2 兩階段訓練流程3.2.1 基于 SFT 的推理預熱3.2.2 基于 RLFT 的推理增強3.3 推理與評估4. 實驗4.1 主要實驗結果4.2 工具使用分析4.3 消融實驗4.4 泛化性評估5. 結…

Bug 排查日記:打造高效問題定位與解決的技術秘籍

一、引言在軟件開發的漫漫征程中&#xff0c;Bug 如影隨形&#xff0c;成為開發者們必須跨越的一道道障礙。它們或如微小的瑕疵&#xff0c;影響用戶體驗&#xff1b;或似隱藏的炸彈&#xff0c;引發系統故障&#xff0c;導致嚴重后果。高效排查 Bug&#xff0c;不僅是保障軟件…

使用 Sentry 為 PHP 和 Web 移動小程序提供多平臺錯誤監控

今天我在 reddit 上看到 Sentry 的推廣&#xff0c;想到 19 年我第一次在公司自研產品b2b2c上使用 Sentry 的經歷&#xff0c;后面在其他項目上多次使用Sentry&#xff0c;今天就順手分享一下在 Laravel 項目中接入 Sentry 的實踐心得。現代項目往往涉及 Web、移動端和小程序&a…

Python包管理工具全對比:pip、conda、Poetry、uv、Flit深度解析

在Python開發中&#xff0c;包的管理和使用是重要環節&#xff0c;現如今python包管理工具眾多&#xff0c;如何選擇合適的管理工具&#xff1f;常用的工具有pip、conda、Poetry、uv、Flit&#xff0c;下面這些工具進行詳細對比分析。一、工具概覽對比工具類型開發者主要特點適…

車載診斷架構 --- Service 14一丟丟小匯總

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做你把時間花在哪里,你的人生就在哪里。千萬別看見別人發光,就覺得自己暗淡。人生如逆旅,你我皆行人。唯有不斷閱己、越己、悅己才能活出生命的意…

Struts2 工作總結

一 in&#xff0c;在SQL中&#xff0c;IN 是一個條件操作符&#xff0c;用于指定多個可能的值&#xff0c;通常用在 WHERE 子句中。它的作用是檢查某個字段的值是否在給定的值列表中&#xff0c;相當于多個 OR 條件的簡寫形式。不使用 IN&#xff08;冗長&#xff09;SELECT * …

MQTT 認證與授權機制實踐(二)

四、實戰案例&#xff1a;主流 Broker 的認證授權配置指南&#xff08;一&#xff09;EMQ X&#xff1a;企業級物聯網 Broker 的安全方案1. 認證配置&#xff08;用戶名密碼 證書&#xff09;EMQ X 作為一款企業級物聯網 Broker&#xff0c;在安全認證方面提供了豐富且靈活的配…

多路轉接介紹及代碼實現

目錄 1.多路轉接技術的產生背景 2.select 3.poll 3.epoll 1.多路轉接技術的產生背景 一個技術的出現必然有它要解決的問題,那么多路轉接解決的問題是什么嗯? 我們知道,一個進程里面有一個文件描述符表管理這個進程所打開的文件,我們進行網絡通信的時候,本質就是創建一個…

《sklearn機器學習——回歸指標1》

skearn.metrics模塊實現一些損失函數&#xff0c;評分&#xff0c;并且應用函數去測度回歸標簽。其中一些已經改進&#xff0c;可以處理多指標案例&#xff1a;mean_squared_error&#xff0c;mean_absolute_error&#xff0c;explained_variance_score和r2_score。 這些函數使…

消息存儲機制-索引文件及頁緩存

對于生產者來說&#xff0c;將消息寫到commit log文件里面。這里會有消息的邏輯隊列&#xff0c;邏輯隊列里面保存了消息的偏移量。除了consumerquenue之外&#xff0c;它還會將數據分發到另外一個文件叫indexfile索引文件里面。這個索引文件可以保存消息的一些信息&#xff0c…

輾轉相除法(歐幾里得算法)的證明

歡迎訪問我的主頁: https://heeheeaii.github.io/ 輾轉相除法是一種用于計算兩個非負整數最大公約數的有效算法。它的證明主要分為兩個部分&#xff1a; 證明核心引理&#xff1a; gcd(a,b)gcd(b,amodb)證明算法的收斂性&#xff1a; 證明算法一定會在有限步內結束。 輾轉相除法…

RL【3】:Bellman Optimality Equation

系列文章目錄 文章目錄系列文章目錄前言Definition of optimal policyBellman optimality equationIntroductionMaximization on the right-hand sideContraction mapping theoremSolutionOptimalityAnalyzing optimal policies總結前言 本系列文章主要用于記錄 B站 趙世鈺老師…

有序數組,距離目標最近的k個數 二分查找

&#x1f914; 新手做題思路&#xff1a;第1步&#xff1a;理解題目- 找距離x最近的k個數- 數組已排序- 返回結果也要排序&#xff08;升序&#xff09;- 距離相同時&#xff0c;選擇較小的數第2步&#xff1a;關鍵insight- 數組已排序 → 考慮二分查找- 最近的k個數一定是連續…