React 全面入門與進階實戰教程

文章目錄

  • 一、認識 React
    • 1.1 核心特點
  • 二、快速搭建 React 項目
    • 2.1 使用 Create React App
    • 2.2 使用 Vite 創建更輕量的 React 項目
    • 2.3 項目結構概覽
  • 三、React 核心語法基礎
    • 3.1 JSX:React 的模板語法
    • 3.2 函數組件與 Props
    • 3.3 useState:定義響應式狀態
    • 3.4 條件渲染
    • 3.5 列表渲染
    • 3.6 useEffect:副作用管理
  • 四、組件通信方式詳解
    • 4.1 父 → 子(props)
    • 4.2 子 → 父(回調函數)
    • 4.3 跨層通信:Context
  • 五、React Router 路由配置
    • 5.1 安裝
    • 5.2 使用 BrowserRouter 和 Routes
    • 5.3 路由跳轉和傳參
  • 六、狀態管理(Redux Toolkit)
    • 6.1 安裝依賴
    • 6.2 創建切片和 Store
    • 6.3 在組件中使用
  • 七、進階技巧與性能優化
    • 7.1 React.memo
    • 7.2 useCallback / useMemo
    • 7.3 異步數據處理:React Query 示例
  • 八、推薦的 React 技術棧生態
    • 8.1 網絡請求:axios + swr
      • axios 簡用法:
      • swr 使用(自動緩存 + 重試):
    • 8.2 表單處理:react-hook-form
    • 8.3 狀態管理:Redux Toolkit + Zustand(更輕)
    • 8.4 動畫庫:Framer Motion
    • 8.5 UI 框架推薦
    • 8.6 構建工具推薦
  • 九、部署與上線
    • 9.1 構建項目
    • 9.2 免費部署平臺
  • 十、總結與學習路徑建議

一、認識 React

React 是由 Facebook 開發的構建用戶界面的 JavaScript 庫。它通過組件化的開發方式提高了 UI 復用能力,是現代前端開發的核心技術之一。

1.1 核心特點

  • 基于組件:構建復雜 UI 就像搭積木。
  • 虛擬 DOM:高效的 UI 更新策略。
  • 單向數據流:更易于維護和調試。
  • 聲明式編程:代碼更簡潔、更可預測。

二、快速搭建 React 項目

2.1 使用 Create React App

npx create-react-app my-app
cd my-app
npm start

2.2 使用 Vite 創建更輕量的 React 項目

npm create vite@latest my-app --template react
cd my-app
npm install
npm run dev

2.3 項目結構概覽

my-app/
├── src/
│   ├── App.jsx
│   ├── main.jsx
│   ├── components/
├── public/
├── index.html
└── package.json

三、React 核心語法基礎

3.1 JSX:React 的模板語法

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

注意事項:

  • 使用 className 替代 class
  • 表達式用 {} 包裹;
  • 標簽必須閉合。

3.2 函數組件與 Props

function Welcome(props) {return <h1>歡迎, {props.name}</h1>;
}<Welcome name="張三" />

3.3 useState:定義響應式狀態

import { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<><p>當前數量:{count}</p><button onClick={() => setCount(count + 1)}>+1</button></>);
}

3.4 條件渲染

{isLogin ? <p>歡迎回來</p> : <p>請登錄</p>}

3.5 列表渲染

const users = ['Tom', 'Jerry', 'Lucy'];
<ul>{users.map((name, i) => <li key={i}>{name}</li>)}
</ul>

3.6 useEffect:副作用管理

useEffect(() => {console.log('組件已掛載');return () => {console.log('組件已卸載');};
}, []);

四、組件通信方式詳解

4.1 父 → 子(props)

function Child({ msg }) {return <p>{msg}</p>;
}function Parent() {return <Child msg="來自父組件" />;
}

4.2 子 → 父(回調函數)

function Child({ onSend }) {return <button onClick={() => onSend('hello')}>點擊傳值</button>;
}function Parent() {const handleMsg = (msg) => console.log(msg);return <Child onSend={handleMsg} />;
}

4.3 跨層通信:Context

const ThemeContext = createContext();function App() {return (<ThemeContext.Provider value="dark"><Toolbar /></ThemeContext.Provider>);
}function Toolbar() {return <ThemedButton />;
}function ThemedButton() {const theme = useContext(ThemeContext);return <button className={theme}>按鈕</button>;
}

五、React Router 路由配置

5.1 安裝

npm install react-router-dom

5.2 使用 BrowserRouter 和 Routes

import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';function App() {return (<BrowserRouter><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /></Routes></BrowserRouter>);
}

5.3 路由跳轉和傳參

<Link to="/about">跳轉到 About</Link>const navigate = useNavigate();
navigate('/about');

六、狀態管理(Redux Toolkit)

6.1 安裝依賴

npm install @reduxjs/toolkit react-redux

6.2 創建切片和 Store

// counterSlice.js
import { createSlice } from '@reduxjs/toolkit';const counterSlice = createSlice({name: 'counter',initialState: 0,reducers: {increment: (state) => state + 1}
});export const { increment } = counterSlice.actions;
export default counterSlice.reducer;
// store.js
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';export const store = configureStore({reducer: {counter: counterReducer}
});

6.3 在組件中使用

import { useSelector, useDispatch } from 'react-redux';
import { increment } from './counterSlice';function Counter() {const count = useSelector(state => state.counter);const dispatch = useDispatch();return (<div><p>當前:{count}</p><button onClick={() => dispatch(increment())}>+1</button></div>);
}

七、進階技巧與性能優化

7.1 React.memo

const MyComponent = React.memo(({ value }) => {return <div>{value}</div>;
});

7.2 useCallback / useMemo

const handleClick = useCallback(() => {console.log('click');
}, []);const expensiveValue = useMemo(() => {return computeSomething();
}, [input]);

7.3 異步數據處理:React Query 示例

npm install @tanstack/react-query
import { useQuery } from '@tanstack/react-query';const { data, isLoading } = useQuery(['todos'], fetchTodos);

八、推薦的 React 技術棧生態

React 周邊生態繁榮,推薦以下實用庫,并結合使用場景:

8.1 網絡請求:axios + swr

axios 簡用法:

import axios from 'axios';axios.get('/api/user').then(res => {console.log(res.data);
});

swr 使用(自動緩存 + 重試):

import useSWR from 'swr';const fetcher = url => fetch(url).then(res => res.json());function User() {const { data, error } = useSWR('/api/user', fetcher);if (error) return <div>加載失敗</div>;if (!data) return <div>加載中...</div>;return <div>用戶名: {data.name}</div>;
}

8.2 表單處理:react-hook-form

npm install react-hook-form
import { useForm } from 'react-hook-form';function Form() {const { register, handleSubmit } = useForm();const onSubmit = data => console.log(data);return (<form onSubmit={handleSubmit(onSubmit)}><input {...register('username')} /><input type="submit" /></form>);
}

8.3 狀態管理:Redux Toolkit + Zustand(更輕)

Zustand 示例:

npm install zustand
import create from 'zustand';const useStore = create(set => ({count: 0,inc: () => set(state => ({ count: state.count + 1 }))
}));function Counter() {const { count, inc } = useStore();return <button onClick={inc}>Count: {count}</button>;
}

8.4 動畫庫:Framer Motion

npm install framer-motion
import { motion } from 'framer-motion';<motion.div animate={{ x: 100 }} transition={{ duration: 1 }} />

8.5 UI 框架推薦

框架特點
Ant Design企業級組件,規范統一
MUIGoogle Material 風格
Chakra UI原子化、可組合性強的設計

使用 MUI 示例:

npm install @mui/material @emotion/react @emotion/styled
import Button from '@mui/material/Button';<Button variant="contained">按鈕</Button>

8.6 構建工具推薦

工具特點
Vite快速啟動,ESM 原生支持
Webpack插件/配置豐富,老牌穩定
Parcel零配置、快速構建

Vite 優勢:默認支持 JSX、HMR 熱更新,推薦作為主流 React 項目的構建工具。


九、部署與上線

9.1 構建項目

npm run build

9.2 免費部署平臺

  • Vercel:https://vercel.com
  • Netlify:https://netlify.com
  • Github Pages:通過 gh-pages 插件

十、總結與學習路徑建議

React 是現代前端開發者必備技能。學習路線推薦:

  1. 掌握 JSX、Hooks、組件設計;
  2. 深入狀態管理與路由;
  3. 理解性能優化與大型項目結構;
  4. 延伸學習 Next.js、React Native、TS+React 項目實戰等。

到這里,這篇文章就和大家說再見啦!我的主頁里還藏著很多 篇 前端 實戰干貨,感興趣的話可以點擊頭像看看,說不定能找到你需要的解決方案~
創作這篇內容花了很多的功夫。如果它幫你解決了問題,或者帶來了啟發,歡迎:
點個贊?? 讓更多人看到優質內容
關注「前端極客探險家」🚀 每周解鎖新技巧
收藏文章?? 方便隨時查閱
📢 特別提醒:
轉載請注明原文鏈接,商業合作請私信聯系
感謝你的閱讀!我們下篇文章再見~ 💕

在這里插入圖片描述

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

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

相關文章

牛津大學開源視頻中的開放世界目標計數!

視頻中的開放世界目標計數 GitHub PaPer Niki Amini-Naieni nikianrobots.ox.ac.uk Andrew Zisserman azrobots.ox.ac.uk 視覺幾何組&#xff08;VGG&#xff09;&#xff0c;牛津大學&#xff0c;英國 ? 圖 1&#xff1a;視頻中的目標計數&#xff1a;給定頂行的視頻&#…

什么是Sentinel?以及優缺點

Sentinel 是阿里巴巴開源的分布式系統流量控制組件&#xff0c;主要用于服務限流、熔斷降級、系統負載保護等場景&#xff0c;幫助提高微服務系統的穩定性和可靠性。它以流量為切入點&#xff0c;通過對流量的監控與控制&#xff0c;保障服務在高并發或異常情況下的可用性。 S…

2025 MWC 上海盛大開幕,聚焦AI、5G-Advanced及開放API

全球商業領袖與政策制定者齊聚一堂,共同探討中國在API創新中的引領地位與產業發展勢頭 2025年6月18日,上海——GSMA 2025 MWC 上海今日在上海浦東嘉里大酒店舉行開幕式,正式拉開帷幕。本屆為期三天的盛會在上海新國際博覽中心(SNIEC)舉行,匯聚約400位演講嘉賓與思想領袖,帶來主…

使用Python腳本進行日常管理

在IT行業&#xff0c;特別是在系統運維領域&#xff0c;效率和準確性是至關重要的。隨著技術的發展&#xff0c;手動處理大量的服務器和網絡設備變得越來越不可行。因此&#xff0c;自動化運維成為了解決這一問題的有效手段。Python&#xff0c;作為一種廣泛使用的編程語言&…

HCIA-數據通信基礎

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 本篇筆記是根據B站上的視頻教程整理而成&#xff0c;感謝UP主的精彩講解&#xff01;如果需要了解更多細節&#xff0c;可以參考以下視頻&#xff1a;…

安全版V4.5密碼加密算法由SM3改為MD5

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文檔用途 本文檔用于指導瀚高數據庫安全版V4.5的密碼加密算法由SM3改為MD5 詳細信息 1、用默認三權用戶和普通用戶登錄數據庫&#xff0c;修改密碼…

MyBatis中#{}和${}的深度解析:SQL注入與動態拼接的終極抉擇

MyBatis中#{}和${}的深度解析&#xff1a;SQL注入與動態拼接的終極抉擇 摘要&#xff1a;在MyBatis的Mapper.xml文件中&#xff0c;#{}和${}這兩個看似簡單的符號&#xff0c;卻隱藏著SQL安全與性能的核心秘密。本文將深入剖析它們的底層差異&#xff0c;并通過真實場景演示如何…

AWS多項目架構完全指南:基于App Runner的安全中轉服務設計

引言:云原生架構的演進之路 在數字化轉型浪潮中,企業常常面臨這樣的挑戰:如何在保證安全隔離的前提下,快速為多個項目部署服務,并實現與現有系統的無縫集成?本文將以真實案例為基礎,詳細介紹如何利用AWS App Runner、Transit Gateway和VPC連接器等現代化服務,構建高可…

Selenium操作指南

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 大家好&#xff0c;今天帶大家一起系統的學習下模擬瀏覽器運行庫Selenium&#xff0c;它是一個用于Web自動化測試及爬蟲應用的重要工具。 Selenium測試直接運行在…

基于Qt開發的ModbusTcp主站軟件開發教程?——從協議原理到工業級實現

目錄 第一章 環境配置與庫集成1. 安裝Qt與Modbus模塊2. 第三方庫兼容性(備選方案)第二章 Modbus TCP協議與Qt類解析1. 協議核心要點2. Qt關鍵類說明第三章 主站連接管理與通信初始化1. 連接建立與斷線重連2. 請求超時與響應機制第四章 數據讀寫操作實戰1. 讀取保持寄存器(功…

什么是缺口箱線圖?如何繪制?

大家好&#xff0c;我是帶我去滑雪&#xff01; 箱線圖是一種用于展示數據分布特征的統計圖表&#xff0c;又稱為盒狀圖或盒須圖。它主要通過一個“箱子”和延伸出的“須”來展示一組數據的中位數、上下四分位數、最大值、最小值以及異常值。箱子的中線表示中位數&#xff0c;上…

在visual studio中為C++程序安裝缺失開源庫

在visual studio中測試一個代碼時出現include了一個之前沒用過的開源庫的情況&#xff0c;因為之前C用的少&#xff0c;這個問題比較基礎&#xff0c;也沒有找到能用的教程&#xff0c;就在這里記錄一下解決過程&#xff0c;以備不時之需。 顯然C和Visual Studio的組合不如pych…

CentOS加密技術全指南

文件系統加密 LUKS (Linux Unified Key Setup) 全盤加密配置方法 安裝前加密&#xff08;Anaconda安裝向導選項&#xff09; 在安裝CentOS時選擇"Encrypt my data"選項設置強密碼&#xff08;建議20字符&#xff0c;混合大小寫、數字和特殊符號&#xff09;密鑰槽管…

純血HarmonyOS5 打造小游戲實踐:繪畫板(附源文件)

OS 應用整體架構與技術棧 該繪圖應用采用了鴻蒙系統推薦的ArkUI框架進行開發&#xff0c;基于TypeScript語言編寫&#xff0c;充分利用了鴻蒙系統的圖形渲染和文件操作能力。應用整體架構遵循MVVM&#xff08;Model-View-ViewModel&#xff09;模式&#xff0c;通過State裝飾…

數據分析和可視化:Py爬蟲-XPath解析章節要點總結

重要知識點 XPath 概述&#xff1a;XPath 是一門可以在 XML 文件中查找信息的語言&#xff0c;也可用于 HTML 文件。它功能強大&#xff0c;提供簡潔明了的路徑表達式和多個函數&#xff0c;用于字符串、數值、時間比較等。1999 年成為 W3C 標準&#xff0c;常用于爬蟲中抓取網…

深入理解PHP中的生成器(Generators)

創建一個生成器非常簡單。你只需要像定義普通函數一樣定義它&#xff0c;但是使用yield關鍵字來產出值。例如&#xff0c;以下是一個簡單的斐波那契數列生成器&#xff1a; function fibonacci() {$num1 0;$num2 1;while (true) {yield $num1;$temp $num1 $num2;$num1 $n…

ubuntu 系統 pgm圖片和png相互轉化

ubuntu 系統 pgm圖片和png相互轉化。 安裝轉化工具&#xff1a; sudo apt-get install imagemagick pgm轉為png指令如下: convert input.pgm output.png png轉為pgm指令如下: convert input.png output.pgm

leetcode:98. 驗證二叉搜索樹

學習要點 加深純遞歸算法的理解 題目鏈接 98. 驗證二叉搜索樹 - 力扣&#xff08;LeetCode&#xff09; 題目描述 解法&#xff1a;純遞歸 vector<int> v;void dfs(TreeNode* root){if(root nullptr){return;}dfs(root->left);v.push_back(root->val);dfs(root…

如何確定IP的缺省子網掩碼是多少?

IP地址 201.100.200.1 的缺省子網掩碼由其 IP地址類別 決定。以下是判斷步驟&#xff1a; 1. 確定IP地址類別 IPv4地址分為 A、B、C、D、E 五類&#xff0c;根據第一個字節&#xff08;前8位&#xff09;的范圍劃分&#xff1a; A類&#xff1a;1.0.0.0 ~ 126.255.255.255&am…

Vue.js 粒子連線動畫組件 - FlyingLines

Vue.js 粒子連線動畫組件 - FlyingLines 使用指南 &#x1f31f; 簡介 FlyingLines 是一個基于 Vue.js 的炫酷粒子連線動畫組件&#xff0c;可以為您的網站添加動態的背景效果。該組件具有以下特點&#xff1a; ? 流暢動畫&#xff1a;基于 Canvas 的高性能渲染&#x1f5b…