React18+ 項目搭建-從初始化、技術選型到開發部署的全流程規劃

搭建一個 React 項目需要從項目初始化、技術選型到開發部署的全流程規劃。以下是詳細步驟和推薦的技術棧:


一、項目初始化

1. 選擇腳手架工具
  • 推薦工具
    • Vite(現代輕量級工具,支持 React 模板,速度快):
      npm create vite@latest my-react-app -- --template react
      
    • Create React App (CRA)(官方傳統腳手架,適合初學者):
      npx create-react-app my-react-app
      
2. 項目結構

初始化后的目錄建議按功能模塊組織:

src/├── components/     # 公共組件├── pages/          # 頁面組件├── assets/         # 靜態資源(圖片、字體等)├── hooks/          # 自定義 Hook├── store/          # 狀態管理(Redux/Zustand)├── services/       # API 請求封裝├── utils/          # 工具函數├── App.jsx         # 根組件└── main.jsx        # 入口文件

二、核心技術棧

1. React 核心庫
  • React 18+:支持并發模式(Concurrent Mode)和 Hooks API。
  • React Router v6:處理路由:
    npm install react-router-dom
    
    基礎配置示例:
    import { BrowserRouter, Routes, Route } from "react-router-dom";
    import Home from "./pages/Home";function App() {return (<BrowserRouter><Routes><Route path="/" element={<Home />} /></Routes></BrowserRouter>);
    }
    
2. 狀態管理
  • 簡單場景:使用 useStateContext API
  • 復雜場景
    • Redux Toolkit(推薦):
      npm install @reduxjs/toolkit react-redux
      
      示例 Store 配置:
      // store/store.js
      import { configureStore } from "@reduxjs/toolkit";
      import counterReducer from "./features/counterSlice";export default configureStore({reducer: {counter: counterReducer,},
      });
      
    • Zustand(輕量級狀態管理庫,適合中小項目)。
3. 樣式方案
  • CSS Modules:避免樣式沖突。
    /* Button.module.css */
    .primary {background: blue;
    }
    
    import styles from "./Button.module.css";
    <button className={styles.primary}>Click</button>
    
  • Tailwind CSS(實用類優先,快速開發):
    npm install -D tailwindcss postcss autoprefixer
    npx tailwindcss init -p
    
  • CSS-in-JS:推薦 styled-componentsEmotion
4. HTTP 請求
  • Axios(推薦):
    npm install axios
    
    封裝示例:
    import axios from 'axios';
    const instance = axios.create({
    baseURL: 'https://api.example.com',
    timeout: 5000
    });instance.interceptors.request.use(
    (config) => {// 在發送請求之前做些什么return config;
    },
    (error) => {// 對請求錯誤做些什么return Promise.reject(error);
    });instance.interceptors.response.use(
    (response) => {// 對響應數據做點什么return response;
    },
    (error) => {// 對響應錯誤做點什么if (error.response) {console.error('Response error:', error.response.status);} else if (error.request) {console.error('No response received:', error.request);} else {console.error('Error setting up request:', error.message);}return Promise.reject(error);
    });export default instance;
    
5. 代碼規范
  • ESLint + Prettier
    npm install -D eslint prettier eslint-config-prettier eslint-plugin-react
    
    配置文件 .eslintrc.json
    {"extends": ["react-app", "prettier"],"plugins": ["prettier"],"rules": {"prettier/prettier": "error"}
    }
    
6. 測試工具
  • Jest + React Testing Library
    npm install -D jest @testing-library/react @testing-library/jest-dom
    
    示例測試:
    // components/Button.test.jsx
    import { render, screen } from "@testing-library/react";
    import Button from "./Button";test("renders button", () => {render(<Button>Click</Button>);expect(screen.getByText("Click")).toBeInTheDocument();
    });
    

三、進階技術棧

1. TypeScript(可選)

使用 TypeScript 增強代碼類型安全:

npm install -D typescript @types/react @types/react-dom

初始化 tsconfig.json

{"compilerOptions": {"target": "ESNext","lib": ["DOM", "DOM.Iterable", "ESNext"],"jsx": "react-jsx"}
}
2. UI 組件庫
  • Ant Design(企業級后臺系統):
    npm install antd @ant-design/icons
    
  • Material-UI (MUI)(遵循 Material Design)。
3. 數據請求優化
  • React Query(管理服務端狀態):
    npm install @tanstack/react-query
    
    示例:
    import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
    const queryClient = new QueryClient();function App() {return (<QueryClientProvider client={queryClient}><Home /></QueryClientProvider>);
    }
    

四、構建與部署

1. 打包構建
  • Vite 或 CRA 均支持:
    npm run build
    
    生成靜態文件位于 dist/build/ 目錄。
2. 部署
  • 靜態托管平臺:Vercel、Netlify(自動化 CI/CD)。
  • 傳統服務器:Nginx 配置:
    server {listen 80;root /path/to/build;index index.html;location / {try_files $uri $uri/ /index.html;}
    }
    

五、技術棧組合推薦

場景技術選型
基礎項目React + Vite + React Router + CSS Modules + Axios
進階項目基礎技術 + Redux Toolkit + Tailwind CSS + Jest
企業級項目TypeScript + React Query + Ant Design/MUI + Docker部署

六、常見問題及解決方案

1. 組件更新異常
  • 原因:狀態未正確更新或組件未正確依賴狀態

  • 解決:

  • 檢查?useState?/?useReducer?是否在組件頂層調用

  • 避免在?useEffect?中依賴過時閉包,改用?useRef?緩存變量

2. 路由跳轉白屏
  • 原因:路由配置錯誤或組件未正確渲染

  • 解決:

  • 確保?Router?包裹整個應用

  • 檢查路由路徑是否匹配(注意?exact?屬性)

3. 性能卡頓
  • 原因:不必要的重渲染或大數據量渲染

  • 解決:

  • 用?React.memo?緩存純組件

  • 列表渲染使用?key?屬性,避免動態修改?key

  • 大數據列表用?react-window?虛擬化

4. TypeScript類型錯誤
  • 原因:接口定義不完整或組件 props 類型缺失

  • 解決:

  • 為組件定義?Props?接口

  • 使用?typeof?推導狀態類型(如?const state = useState(0)?)

七、優化建議

1.?代碼分割與懶加載

使用?React.lazy?和?Suspense?實現路由組件懶加載:
tsx

const Home = React.lazy(() => import(‘./pages/Home’));

2.?狀態管理優化
  • 避免在Redux中存儲臨時UI狀態,改用組件本地狀態

  • 使用?useSelector?的第二個參數(比較函數)減少渲染次數

3.?構建優化
  • Vite配置中開啟壓縮(?build.minify = ‘terser’?)

  • 按需引入組件庫(如Ant Design的babel-plugin-import)

4.?性能監控

使用React DevTools的Profiler分析組件渲染耗時

八、避坑指南

  • 避免直接修改state:?setState?需傳入新對象,用展開運算符?…

  • 合理使用useEffect:避免在依賴項中包含函數,改用?useCallback?緩存

  • 處理異步請求:用React Query管理請求狀態,避免手動處理loading/error狀態

  • 路由參數更新:當路由參數變化時,需用?useEffect?監聽?match.params

通過合理規劃技術棧、規范代碼結構,并針對常見問題提前優化,可高效搭建穩定的React項目。遇到問題時優先查閱官方文檔(如React官網)或使用調試工具定位根源。

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

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

相關文章

人工智能學習框架完全指南(2025年更新版)

一、核心框架分類與適用場景 人工智能框架根據功能可分為深度學習框架、機器學習框架、強化學習框架和傳統工具庫,以下是主流工具及選型建議: 1. 深度學習框架 (1)PyTorch 核心優勢:動態計算圖、靈活性強,適合科研與快速原型開發,支持多模態任務(如NLP、CV) 。技術生…

MySQL 詳解之事務管理

MySQL 詳解之事務管理 在數據庫領域,事務是一個核心概念,它確保了數據操作的可靠性和一致性。尤其是在處理涉及多個步驟且必須全部成功或全部失敗的業務場景時,事務更是不可或缺。本篇文章將深入探討 MySQL 中的事務管理,幫助您全面理解事務的工作原理及其在實際應用中的重…

SpringAI+DeepSeek大模型應用開發——5 ChatPDF

ChatPDF 知識庫 RAG檢索增強 由于訓練大模型非常耗時&#xff0c;再加上訓練語料本身比較滯后&#xff0c;所以大模型存在知識限制問題&#xff1a; 知識數據比較落后&#xff0c;往往是幾個月之前的&#xff1b;不包含太過專業領域或者企業私有的數據&#xff1b; 為了解決…

SSH 互信被破壞能導致 RAC 異常關閉嗎

一、 SSH 互信和 RAC 的關系 1、SSH 互信對 RAC 的作用 Oracle 11g R2 在安裝 Grid Infrastructure 的時候&#xff0c;能夠通過安裝程序配置節 點間的 SSH 用戶等效性&#xff0c;之所以要在安裝之前配置 SSH 用戶等效性&#xff0c;是為了能 夠在安裝前使用 C…

【數字圖像處理】立體視覺信息提取

雙目立體視覺原理 設一個為參考平面&#xff0c;一個為目標平面。增加了一個攝像頭后&#xff0c;P與Q在目標面T上有分別的成像點 雙目立體視覺&#xff1a;從兩個不同的位置觀察同一物體&#xff0c;用三角測量原理計算攝像機到該物體的距離的 方法 原理&#xff1a;三角測量…

基于springboot+vue的校園二手物品交易平臺

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【Redis】Redis基本命令(1)

KEYS 返回所有滿足樣式&#xff08;pattern&#xff09;的key。 KEY * 返回所有key&#xff0c;不簡易使用 性能問題&#xff1a;當 Redis 存儲百萬級鍵時&#xff0c;會消耗大量 CPU 和內存資源&#xff0c;Redis 是單線程模型&#xff0c;KEYS * 執行期間會阻塞其他所有命令…

C#通用常見面試題-精心整理

以下是優化后的版本,在原有內容基礎上補充了應用場景,其他結構保持不變: 上位機面試題解答(技術詳解+示例) C#-IOC框架 1. 值類型和引用類型的本質區別 解釋 值類型:存儲在棧中,直接保存數據值(如 int, struct)。引用類型:存儲在堆中,變量保存對象地址(如 class,…

K8S節點出現Evicted狀態“被驅逐”

在Kubernetes集群中&#xff0c;Pod狀態為“被驅逐&#xff08;evicted&#xff09;”表示Pod無法在當前節點上繼續運行&#xff0c;已被集群從節點上移除。 問題分析&#xff1a; 節點磁盤空間不足 &#xff0c;使用df -h查看磁盤使用情況 可以看到根目錄 / 已100%滿&#x…

[密碼學基礎]國密算法深度解析:中國密碼標準的自主化之路

國密算法深度解析&#xff1a;中國密碼標準的自主化之路 國密算法&#xff08;SM系列算法&#xff09;是中國自主研發的密碼技術標準體系&#xff0c;旨在打破國際密碼技術壟斷&#xff0c;保障國家信息安全。本文將從技術原理、應用場景和生態發展三個維度&#xff0c;全面解…

Linux 網絡基礎(三) TCP/IP協議

一、TCP 與 IP 的關系 IP 層的核心作用是定位主機&#xff0c;具有將數據從主機 A 發送到主機 B 的能力&#xff0c;但是能力并不能保證一定能夠做到&#xff0c;所以這時就需要 TCP 起作用了&#xff0c;TCP 可以通過超時重傳、擁塞控制等策略來保證數據能夠發送到 B 主機。 所…

基于 Vue 的Tiptap 富文本編輯器使用指南

目錄 &#x1f9f0; 技術棧 &#x1f4e6; 所需依賴 &#x1f4c1; 文件結構 &#x1f9f1; 編輯器組件實現&#xff08;components/Editor.vue&#xff09; ? 常用操作指令 &#x1f9e0; 小貼士 &#x1f9e9; Tiptap 擴展功能使用說明&#xff08;含快捷鍵與命令&am…

統計圖表ECharts

統計某個時間段&#xff0c;觀看人數 ①、數據表 ②、業務代碼 RestController RequstMapping(value"/admin/vod/videoVisitor") CrossOrigin public class VideoVisitorController{Autowriedprivate VideoVisitorService videoVisitorService;//課程統計的接口…

ubuntu 安裝 redis server

ubuntu 安裝 redis server sudo apt update sudo apt install redis-server The following NEW packages will be installed:libhiredis0.14 libjemalloc2 liblua5.1-0 lua-bitop lua-cjson redis-server redis-toolssudo systemctl start redis-server sudo systemctl ena…

【白雪講堂】[特殊字符]內容戰略地圖|GEO優化框架下的內容全景布局

&#x1f4cd;內容戰略地圖&#xff5c;GEO優化框架下的內容全景布局 1?? 頂層目標&#xff1a;GEO優化戰略 目標關鍵詞&#xff1a; 被AI理解&#xff08;AEO&#xff09; 被AI優先推薦&#xff08;GEO&#xff09; 在關鍵場景中被AI復讀引用 2?? 三大引擎邏輯&#x…

NVIDIA 自動駕駛技術見解

前言 參與 NVIDIA自動駕駛開發者實驗室 活動&#xff0c;以及解讀了 NVIDIA 安全報告 自動駕駛 白皮書&#xff0c;本文是我的一些思考和見解。自動駕駛技術的目標是為了改善道理安全、減少交通堵塞&#xff0c;重塑更安全、高效、包容的交通生態。在這一領域&#xff0c;NVI…

OpenCV day6

函數內容接上文&#xff1a;OpenCV day4-CSDN博客 , OpenCV day5-CSDN博客 目錄 平滑&#xff08;模糊&#xff09; 25.cv2.blur()&#xff1a; 26.cv2.boxFilter(): 27.cv2.GaussianBlur()&#xff1a; 28.cv2.medianBlur(): 29.cv2.bilateralFilter()&#xff1a; 銳…

Function calling, 模態上下文協議(MCP),多步能力協議(MCP) 和 A2A的區別

背景闡述 本文大部分內容都是基于openAI 的 chatGPT自動生成。作者進行了一些細微的調整。 LLM 帶來了很多思維的活躍&#xff0c;基于LLM&#xff0c;產生了很多應用&#xff0c;很多應用也激活了LLM的新的功能。 Function calling&#xff0c;MCP&#xff08;Modal Contex…

火山RTC 5 轉推CDN 布局合成規則

實時音視頻房間&#xff0c;轉推CDN&#xff0c;文檔&#xff1a; 轉推直播--實時音視頻-火山引擎 一、轉推CDN 0、前提 * 在調用該接口前&#xff0c;你需要在[控制臺](https://console.volcengine.com/rtc/workplaceRTC)開啟轉推直播功能。<br> * 調…

力扣面試150題--插入區間和用最少數量的箭引爆氣球

Day 28 題目描述 思路 初次思路&#xff1a;借鑒一下昨天題解的思路&#xff0c;將插入的區間與區間數組作比較&#xff0c;插入到升序的數組中&#xff0c;其他的和&#xff08;合并區間&#xff09;做法一樣。 注意需要特殊處理一下情況&#xff0c;插入區間比數組中最后一…