React學習教程,從入門到精通, React 新創建組件語法知識點及案例代碼(11)

React 新創建組件語法知識點及案例代碼

React 是由 Facebook 開發的一個用于構建用戶界面的 JavaScript 庫。隨著 React 的不斷發展,創建組件的方式也在不斷演進。本文將詳細介紹 React 中創建組件的最新語法,包括函數組件(Functional Components)、使用 Hooks 以及一些現代的 JavaScript 特性,并提供一個詳細的案例代碼,帶有詳細注釋,幫助 React 初學者快速上手。


一、React 組件概述

在 React 中,組件是構建用戶界面的基本單元。組件可以是一個函數或一個類,但隨著 React Hooks 的引入,函數組件已成為主流。以下是創建組件的幾種主要方式:

  1. 函數組件(Functional Components):使用 JavaScript 函數定義的組件。
  2. 類組件(Class Components):使用 ES6 類定義的組件。
  3. 使用 Hooks 的函數組件:在函數組件中使用 React Hooks 來管理狀態和副作用。

本文將重點介紹使用 Hooks 的函數組件,這是當前 React 社區推薦的方式。


二、React 新創建組件語法知識點

1. 函數組件(Functional Components)

函數組件是最簡單的組件形式,它接收 props 作為參數并返回一個 React 元素。

import React from 'react';function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}

2. 使用 JSX

JSX 是一種 JavaScript 的語法擴展,允許在 JavaScript 代碼中編寫類似 HTML 的結構。它是 React 推薦使用的語法。

const element = <h1>Hello, World!</h1>;

3. Props(屬性)

props 是組件接收的參數,用于將數據從父組件傳遞到子組件。

function Greeting(props) {return <h1>Hello, {props.name}!</h1>;
}// 使用組件
<Greeting name="Alice" />

4. State(狀態)

在函數組件中,使用 useState Hook 來管理狀態。

import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}

5. Hooks

Hooks 是 React 16.8 引入的新特性,允許在函數組件中使用狀態和其他 React 功能。主要的 Hooks 包括:

  • useState:用于在函數組件中添加狀態。
  • useEffect:用于處理副作用,如數據獲取、訂閱等。
  • useContext:用于在組件樹中共享狀態。
  • useReducer:用于復雜的狀態邏輯。

6. 事件處理

在 React 中,事件處理與 DOM 事件類似,但使用駝峰命名法。

function Button() {const handleClick = () => {alert('Button clicked!');};return <button onClick={handleClick}>Click Me</button>;
}

7. 條件渲染

根據狀態或 props 條件渲染不同的內容。

function Greeting(props) {const isLoggedIn = props.isLoggedIn;return (<div>{isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign in</h1>}</div>);
}

8. 列表渲染

使用 map 方法渲染列表。

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =><li key={number.toString()}>{number}</li>
);function NumberList() {return (<ul>{listItems}</ul>);
}

9. 組件組合與復用

通過組合多個組件來構建復雜的用戶界面。

function App() {return (<div><Welcome name="Alice" /><Welcome name="Bob" /><Welcome name="Charlie" /></div>);
}

三、案例代碼:簡單的待辦事項(Todo)應用

下面是一個使用 React 函數組件和 Hooks 實現的簡單待辦事項應用。該應用包含添加待辦事項、標記完成和刪除待辦事項的功能。

1. 完整代碼

import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import './styles.css';// TodoItem 組件
function TodoItem({ todo, toggleComplete, deleteTodo }) {return (<li className="todo-item"><inputtype="checkbox"checked={todo.completed}onChange={() => toggleComplete(todo.id)}/><span style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>{todo.text}</span><button onClick={() => deleteTodo(todo.id)}>Delete</button></li>);
}// TodoList 組件
function TodoList({ todos, toggleComplete, deleteTodo }) {return (<ul>{todos.map((todo) => (<TodoItemkey={todo.id}todo={todo}toggleComplete={toggleComplete}deleteTodo={deleteTodo}/>))}</ul>);
}// AddTodo 組件
function AddTodo({ addTodo }) {const [value, setValue] = useState('');const handleSubmit = (e) => {e.preventDefault();if (!value.trim()) return;addTodo(value.trim());setValue('');};return (<form onSubmit={handleSubmit}><inputtype="text"value={value}onChange={(e) => setValue(e.target.value)}placeholder="Add a new todo"/><button type="submit">Add</button></form>);
}// Main App 組件
function App() {const [todos, setTodos] = useState([{ id: 1, text: 'Learn React', completed: false },{ id: 2, text: 'Build a Todo App', completed: false },]);const addTodo = (text) => {const newTodo = {id: Date.now(),text: text,completed: false,};setTodos([...todos, newTodo]);};const toggleComplete = (id) => {const updatedTodos = todos.map((todo) => {if (todo.id === id) {return { ...todo, completed: !todo.completed };}return todo;});setTodos(updatedTodos);};const deleteTodo = (id) => {const filteredTodos = todos.filter((todo) => todo.id !== id);setTodos(filteredTodos);};return (<div className="app"><h1>My Todo List</h1><AddTodo addTodo={addTodo} /><TodoList todos={todos} toggleComplete={toggleComplete} deleteTodo={deleteTodo} /></div>);
}ReactDOM.render(<App />, document.getElementById('root'));

2. 代碼詳解

a. 導入必要的模塊
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import './styles.css';
  • ReactuseState 是 React 的核心庫和 Hook。
  • ReactDOM 用于將 React 組件渲染到 DOM 中。
  • ./styles.css 是應用的樣式文件。
b. TodoItem 組件
function TodoItem({ todo, toggleComplete, deleteTodo }) {return (<li className="todo-item"><inputtype="checkbox"checked={todo.completed}onChange={() => toggleComplete(todo.id)}/><span style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>{todo.text}</span><button onClick={() => deleteTodo(todo.id)}>Delete</button></li>);
}
  • Props:
    • todo: 單個待辦事項對象。
    • toggleComplete: 切換完成狀態的函數。
    • deleteTodo: 刪除待辦事項的函數。
  • 功能:
    • 顯示待辦事項的文本和完成狀態。
    • 提供復選框來切換完成狀態。
    • 提供刪除按鈕來刪除待辦事項。
c. TodoList 組件
function TodoList({ todos, toggleComplete, deleteTodo }) {return (<ul>{todos.map((todo) => (<TodoItemkey={todo.id}todo={todo}toggleComplete={toggleComplete}deleteTodo={deleteTodo}/>))}</ul>);
}
  • Props:
    • todos: 待辦事項數組。
    • toggleCompletedeleteTodo 同上。
  • 功能:
    • 渲染所有待辦事項的列表。
    • 使用 map 方法遍歷 todos 數組并渲染 TodoItem 組件。
d. AddTodo 組件
function AddTodo({ addTodo }) {const [value, setValue] = useState('');const handleSubmit = (e) => {e.preventDefault();if (!value.trim()) return;addTodo(value.trim());setValue('');};return (<form onSubmit={handleSubmit}><inputtype="text"value={value}onChange={(e) => setValue(e.target.value)}placeholder="Add a new todo"/><button type="submit">Add</button></form>);
}
  • Props:
    • addTodo: 添加新待辦事項的函數。
  • 功能:
    • 提供一個輸入框供用戶輸入新的待辦事項。
    • 處理表單提交,調用 addTodo 函數并清空輸入框。
e. Main App 組件
function App() {const [todos, setTodos] = useState([{ id: 1, text: 'Learn React', completed: false },{ id: 2, text: 'Build a Todo App', completed: false },]);const addTodo = (text) => {const newTodo = {id: Date.now(),text: text,completed: false,};setTodos([...todos, newTodo]);};const toggleComplete = (id) => {const updatedTodos = todos.map((todo) => {if (todo.id === id) {return { ...todo, completed: !todo.completed };}return todo;});setTodos(updatedTodos);};const deleteTodo = (id) => {const filteredTodos = todos.filter((todo) => todo.id !== id);setTodos(filteredTodos);};return (<div className="app"><h1>My Todo List</h1><AddTodo addTodo={addTodo} /><TodoList todos={todos} toggleComplete={toggleComplete} deleteTodo={deleteTodo} /></div>);
}
  • State:
    • todos: 存儲所有待辦事項的數組。
  • 函數:
    • addTodo: 添加新的待辦事項。
    • toggleComplete: 切換待辦事項的完成狀態。
    • deleteTodo: 刪除指定的待辦事項。
  • 功能:
    • 渲染 AddTodoTodoList 組件。
    • 提供初始的待辦事項數據。
f. 渲染應用
ReactDOM.render(<App />, document.getElementById('root'));
  • App 組件渲染到頁面的 root 元素中。

3. 樣式(styles.css)

.app {max-width: 600px;margin: 50px auto;text-align: center;
}.todo-item {list-style: none;padding: 10px;border-bottom: 1px solid #ccc;display: flex;align-items: center;
}.todo-item input {margin-right: 10px;
}.todo-item span {flex: 1;text-align: left;
}.todo-item button {background-color: #ff4d4d;color: white;border: none;padding: 5px 10px;cursor: pointer;
}
  • 樣式說明:
    • 設置應用的寬度和居中顯示。
    • 樣式化待辦事項列表項,包括復選框、文本和刪除按鈕。

四、運行應用

  1. 安裝依賴

    確保你已經安裝了 Node.js 和 npm 或 yarn。

    npx create-react-app my-todo-app
    cd my-todo-app
    
  2. 添加代碼

    將上述代碼替換 src 文件夾中的 App.jsindex.js 文件,并添加 styles.css 文件。

  3. 啟動應用

    npm start
    

    yarn start
    
  4. 訪問應用

    打開瀏覽器,訪問 http://localhost:3000,你將看到簡單的待辦事項應用。


五、總結

本文介紹了 React 中創建組件的最新語法,包括函數組件、使用 Hooks 以及一些現代的 JavaScript 特性。通過一個簡單的待辦事項應用案例,詳細展示了如何組合多個組件、管理狀態、處理事件以及樣式化組件。希望這些內容能夠幫助 React 初學者快速掌握 React 組件的基本概念和實踐技巧。

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

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

相關文章

SQL Server全鏈路安全防護

SQL Server 的安全性是一個多層次、綜合性的體系&#xff0c;旨在保護數據免受未授權訪問、篡改和泄露。其核心安全機制可概括為以下幾個方面&#xff1a;1. 身份驗證&#xff08;Authentication&#xff09; Windows 身份驗證&#xff1a; 使用 Windows 賬戶&#xff08;域/本…

如何利用Web3提升企業競爭力

在這個信息爆炸的時代&#xff0c;Web3技術以其獨特的去中心化、透明性和用戶主權特性&#xff0c;成為企業提升競爭力的新戰場。本文將深入探討企業如何把握Web3的浪潮&#xff0c;實現業務的飛躍。 1. 把握Web3的核心價值 Web3的核心在于去中心化、透明性和用戶主權。這種模式…

HOW - 在瀏覽器下載一個 Excel 表格文件

文章目錄一、技術方案二、前端具體實現代碼分析轉換邏輯注意事項一、技術方案 后臺返回 base64 數據 {code: 0,data: "base64;...", }前端進行數據格式轉化并下載成 Excel 文件 這篇文章主要介紹第二個步驟的實現。 二、前端具體實現 代碼 src/utils/transform…

【Android】Room數據庫的使用

三三要成為安卓糕手 引入 Room是一個抽象層&#xff0c;對SQLite進行了封裝&#xff0c;簡化了SQLite數據庫的操作&#xff0c;讓開發者能以更加對象化的方式進行數據庫操作&#xff1b;Room解決了SQLite操作繁瑣&#xff0c;容易產生錯誤的問題&#xff0c;讓開發者能以更加對…

Next.js 介紹:為什么選擇它來構建你的下一個 Web 應用?

Next.js 介紹&#xff1a;為什么選擇它來構建你的下一個 Web 應用&#xff1f; 作者&#xff1a;碼力無邊你好&#xff0c;歡迎來到我們的 Next.js 專欄&#xff01;在接下來的 30 篇文章中&#xff0c;我們將一起踏上一段從入門到精通的旅程&#xff0c;深入探索這個強大而優雅…

開發環境 之 編輯器、編譯器、IDE梳理

小生第一次學習編程時&#xff0c;懵懵搞不懂編輯器、編譯器、IDE區別&#xff0c;雖然這對前期學習編程語言語法的影響不是很大&#xff0c;但是現在梳理一下&#xff0c;總歸心里踏實些。 一、概念及區別 IDE是前面幾者的集成&#xff0c;前面幾個分別是IDE的子集。對比維度編…

高級RAG策略學習(六)——Contextual Chunk Headers(CCH)技術

Contextual Chunk Headers&#xff08;CCH&#xff09;技術深度解析 第一部分&#xff1a;理論基礎與核心原理 一、核心定義&#xff1a;給 “文本塊” 加 “上下文標簽” Contextual Chunk Headers&#xff08;上下文塊標題&#xff0c;簡稱 CCH&#xff09;本質是為文檔拆分后…

人形機器人控制系統核心芯片從SoC到ASIC的進化路徑

目錄&#xff1a; 0 前言 1 人形機器人控制系統核心芯片選擇ASIC而非SoC的理由 1.1 SoC的架構特征 1.2 ASIC的架構特征 1.3 SoC的優勢&#xff08;繼承軟件生態&#xff09; 1.4 ASIC的優勢&#xff08;硬件底層算法就是應用層算法&#xff09; 1.5 人形機器人控制系統核…

linux thread 線程一

thread線程是linux的重要概念。線程不能獨立存在&#xff0c;必須在進程中存在。一個進程必須有一個線程&#xff0c;如果進程中沒有創建新線程&#xff0c;進程啟動后本身就有一個線程。使用getpid、getppid獲取進程的進程ID和父進程ID。使用pthread_self獲取到當前線程的ID。…

Arduino Nano33 BLESense Rev2【室內空氣質量檢測語音識別藍牙調光臺燈】

一、硬件介紹 1、產品特點 Arduino Nano 33 BLE Rev2&#xff0c;利用了nRF52840微控制器的先進功能。這款32位Arm Cortex-M4 CPU 64 MHz與MicroPython的兼容性增強了板子的靈活性&#xff0c;該開發板的突出特點是其藍牙低功耗&#xff08;BLE&#xff09;功能&#xff0c;使…

【問題解決】mac筆記本遇到鼠標無法點擊鍵盤可響應處理辦法?(Command+Option+P+R)

背景 如題。鼠標無法點擊&#xff0c;但可以移動。觸控板能夠波動&#xff0c;鼠標翻頁能夠work&#xff0c;但是點擊后無法響應。 根因 電腦緩存問題 解決辦法 重置PRAM&#xff1a; 確保電腦關機狀態&#xff08;可以先sudo shutdown -t now)&#xff08;一定要確保&#xff…

23ai數據庫通過SQLcl生成AWR報告

?1. 查看現有快照SQL> awr list snap;SNAP_ID DBID BEGIN_INTERVAL_TIME END_INTERVAL_TIME FLUSH_LEVEL __________ _____________ __________________________________ __________________________________ ______________793 …

基于Django+Vue3+YOLO的智能氣象檢測系統

基于DjangoVue3YOLO的智能氣象檢測系統 項目簡介 本項目是一個集成了人工智能深度學習技術的現代化氣象檢測系統&#xff0c;采用前后端分離架構&#xff0c;結合YOLO目標檢測算法&#xff0c;實現了對氣象現象的智能識別與分析。系統提供了完整的用戶管理、實時檢測、歷史記錄…

(4)什么時候引入Seata‘‘

非常好的問題&#xff01;這兩個問題正是技術選型時需要重點考慮的。什么時候需要引入 Seata&#xff1f;需要引入 Seata 的場景&#xff1a;跨數據庫的分布式事務// 訂單服務&#xff08;MySQL&#xff09; 庫存服務&#xff08;PostgreSQL&#xff09; 賬戶服務&#xff08…

蘋果內部 AI聊天機器人“Asa”曝光,為零售員工打造專屬A

MacRumors網站的亞倫佩里斯&#xff08;Aaron Perris&#xff09;透露&#xff0c;蘋果正在內部測試一款名為“Asa”的AI聊天機器人。這款工具旨在賦能Apple Store零售員工&#xff0c;幫助他們快速掌握iPhone等產品的特色和差異化使用場景&#xff0c;從而提升與顧客互動時的解…

MySQL常見報錯分析及解決方案總結(12)---slave_net_timeout

關于超時報錯&#xff0c;一共有五種超時參數&#xff0c;詳見&#xff1a;MySQL常見報錯分析及解決方案總結(7)---超時參數connect_timeout、interactive_timeout/wait_timeout、lock_wait_timeout、net等-CSDN博客 以下是當前報錯的排查方法和解決方案&#xff1a; 在 Wind…

云計算學習筆記——日志、SELinux、FTP、systemd篇

《云計算學習日記Day15》—— 從零開始的云計算之旅 今天是系統學習云計算的第十五天&#xff0c;記錄了關于我的云計算學習&#xff0c;后續將每日更新我的筆記。歡迎大家一起來學習&#xff0c;如果內容有遺漏和錯誤&#xff0c;還請大家多多指正和包涵&#xff0c;謝謝大家 …

3Ds Max Gamma值完全指南:問題識別與正確設置解析

當渲染圖像與本地圖片相比亮度偏黑或偏白時&#xff0c;很可能是因為Gamma輸入輸出設置不一致。需要注意的是&#xff0c;Gamma問題通常表現為整體亮度偏差&#xff0c;而非大面積曝光或全黑狀況。Gamma設置教程問題一&#xff1a;Gamma校正未開啟如果使用VR幀緩沖窗口渲染但未…

用 Rust + Actix-Web 打造“Hello, WebSocket!”——從握手到回聲,只需 50 行代碼

用 Rust Actix-Web 打造“Hello, WebSocket!”——從握手到回聲&#xff0c;只需 50 行代碼 一、為什么選擇 Rust 寫 WebSocket&#xff1f; 零成本抽象&#xff1a;編譯期確定生命周期&#xff0c;無 GC 抖動&#xff0c;延遲低至微秒級actix-web&#xff1a;Tokio 生態最成熟…

基于Cursor的 STM32工程搭建 (編譯、下載、仿真)

嵌入式學習交流Q群 679912988 簡介 本工程使用GCC編譯器、MinGW、CMake構建工具和OpenOCD調試工具。實現了替代KEIL, IAR等在某些情況下不方便使用的情況。實現了編譯、調試、下載、燒錄一體。搭配Cursor的Tab補全功能&#xff0c;編碼效率大大提升。 工具下載及安裝 Cursor…