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.mzph.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;插入区间比数组中最后一…