首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

React18+ 项目搭建-从初始化、技术选型到开发部署的全流程规划

  • 25-04-22 18:04
  • 3822
  • 13626
juejin.cn

搭建一个 React 项目需要从项目初始化、技术选型到开发部署的全流程规划。以下是详细步骤和推荐的技术栈:


一、项目初始化

1. 选择脚手架工具
  • 推荐工具:
    • Vite(现代轻量级工具,支持 React 模板,速度快):
      bash
      代码解读
      复制代码
      npm create vite@latest my-react-app -- --template react
    • Create React App (CRA)(官方传统脚手架,适合初学者):
      bash
      代码解读
      复制代码
      npx create-react-app my-react-app
2. 项目结构

初始化后的目录建议按功能模块组织:

bash
代码解读
复制代码
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:处理路由:
    bash
    代码解读
    复制代码
    npm install react-router-dom
    基础配置示例:
    jsx
    代码解读
    复制代码
    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. 状态管理
  • 简单场景:使用 useState 或 Context API。
  • 复杂场景:
    • Redux Toolkit(推荐):
      bash
      代码解读
      复制代码
      npm install @reduxjs/toolkit react-redux
      示例 Store 配置:
      js
      代码解读
      复制代码
      // store/store.js import { configureStore } from "@reduxjs/toolkit"; import counterReducer from "./features/counterSlice"; export default configureStore({ reducer: { counter: counterReducer, }, });
    • Zustand(轻量级状态管理库,适合中小项目)。
3. 样式方案
  • CSS Modules:避免样式冲突。
    css
    代码解读
    复制代码
    /* Button.module.css */ .primary { background: blue; }
    jsx
    代码解读
    复制代码
    import styles from "./Button.module.css"; <button className={styles.primary}>Clickbutton>
  • Tailwind CSS(实用类优先,快速开发):
    bash
    代码解读
    复制代码
    npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p
  • CSS-in-JS:推荐 styled-components 或 Emotion。
4. HTTP 请求
  • Axios(推荐):
    bash
    代码解读
    复制代码
    npm install axios
    封装示例:
    js
    代码解读
    复制代码
    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:
    bash
    代码解读
    复制代码
    npm install -D eslint prettier eslint-config-prettier eslint-plugin-react
    配置文件 .eslintrc.json:
    json
    代码解读
    复制代码
    { "extends": ["react-app", "prettier"], "plugins": ["prettier"], "rules": { "prettier/prettier": "error" } }
6. 测试工具
  • Jest + React Testing Library:
    bash
    代码解读
    复制代码
    npm install -D jest @testing-library/react @testing-library/jest-dom
    示例测试:
    jsx
    代码解读
    复制代码
    // components/Button.test.jsx import { render, screen } from "@testing-library/react"; import Button from "./Button"; test("renders button", () => { render(<Button>ClickButton>); expect(screen.getByText("Click")).toBeInTheDocument(); });

三、进阶技术栈

1. TypeScript(可选)

使用 TypeScript 增强代码类型安全:

bash
代码解读
复制代码
npm install -D typescript @types/react @types/react-dom

初始化 tsconfig.json:

json
代码解读
复制代码
{ "compilerOptions": { "target": "ESNext", "lib": ["DOM", "DOM.Iterable", "ESNext"], "jsx": "react-jsx" } }
2. UI 组件库
  • Ant Design(企业级后台系统):
    bash
    代码解读
    复制代码
    npm install antd @ant-design/icons
  • Material-UI (MUI)(遵循 Material Design)。
3. 数据请求优化
  • React Query(管理服务端状态):
    bash
    代码解读
    复制代码
    npm install @tanstack/react-query
    示例:
    jsx
    代码解读
    复制代码
    import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; const queryClient = new QueryClient(); function App() { return ( <QueryClientProvider client={queryClient}> <Home /> QueryClientProvider> ); }

四、构建与部署

1. 打包构建
  • Vite 或 CRA 均支持:
    bash
    代码解读
    复制代码
    npm run build
    生成静态文件位于 dist/ 或 build/ 目录。
2. 部署
  • 静态托管平台:Vercel、Netlify(自动化 CI/CD)。
  • 传统服务器:Nginx 配置:
    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官网)或使用调试工具定位根源。

注:本文转载自juejin.cn的i编程_撸码的文章"https://juejin.cn/post/7495682477786710031"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

104
前端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top