从零开始搭建React项目:初始化与路由配置详解
创作时间:
作者:
@小白创作中心
从零开始搭建React项目:初始化与路由配置详解
引用
CSDN
1.
https://blog.csdn.net/IAIPython/article/details/140892652
本文将详细介绍如何从零开始搭建一个React项目,包括项目初始化、配置、路由设置等步骤。通过本文,你将能够掌握React项目的完整搭建流程,为后续的开发打下坚实的基础。
创建 React 项目
创建项目的方式:
create-react-app 项目名称
如果没有安装 react 脚手架,请先安装:
npm install create-react-app -g
安装成功后,开始配置项目。
配置项目的 icon 和标题
配置 jsconfig.json
目的:用于配置 JavaScript 或 TypeScript 项目的根目录和其他一些选项,以帮助编辑器(如 VS Code)更好地理解项目的结构和提供智能提示
更多可以查看【React 】react 创建项目配置 jsconfig.json 的作用
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"jsx": "preserve",
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}
配置 craco.config.js
CRACO(Create React App Configuration Override)是一个易于理解且强大的工具,它提供了一种简单的方法来覆盖和自定义 Create React App 的配置,而无需执行“eject”操作。这种方法让你能够保留 Create React App 提供的所有优势,同时还能根据需要修改配置。
目的:用于配置 webpack 和一些 react 插件的配置
npm i -D @craco/craco craco-less
安装 craco-less 主要是为了使用 less
const path = require('path')
const CracoLessPlugin = require('craco-less');
const resolve = pathname => path.resolve(__dirname, pathname)
module.exports = {
// less
plugins: [
{
plugin: CracoLessPlugin
},
],
// webpack
webpack: {
alias: {
"@": resolve("src"),
"components": resolve("src/components"),
"utils": resolve("src/utils")
}
}
}
接下来,你需要更新 package.json 中的 scripts 部分,将原本调用 react-scripts 的命令替换为使用 CRACO CLI
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test"
}
项目目录结构划分
清理 react 脚手架默认创建的文件,重新创建符合个人项目开发的文件夹结构(参考如下)
CSS 样式重置
安装 normalize.css
npm install normalize.css
导入
自己编写其他的样式重置 css
body, button, dd, dl, dt, form, h1, h2, h3, h4, h5, h6, hr, input, li, ol, p, pre, td, textarea, th, ul {
padding: 0;
margin: 0;
}
a {
text-decoration: none;
}
img {
vertical-align: top;
}
ul, li {
list-style: none;
}
Router 配置
npm install react-router-dom
src/router/index.js
import React from "react"
import { Navigate } from "react-router-dom"
// 懒加载
const Home = React.lazy(() => import("@/views/home"))
const Entire = React.lazy(() => import("@/views/entire"))
const Detail = React.lazy(() => import("@/views/detail"))
const routes = [
{
path: "/",
element: <Navigate to="/home"/>
},
{
path: "/home",
element: <Home/>
},
{
path: "/entire",
element: <Entire/>
},
{
path: "/detail",
element: <Detail/>
}
]
export default routes
App.jsx
import { memo } from 'react';
import routes from './router';
import { useRoutes } from 'react-router-dom';
// memo: 组件的渲染结果,只会在 props 改变时才会重新渲染
const App = memo(() => {
return (
<div className="app">
<div className="header">header</div>
<div className="page">{useRoutes(routes)}</div>
<div className="footer">footer</div>
</div>
);
});
export default App;
index.js
import React, { Suspense } from 'react' // Suspense 解决路由懒加载问题
import ReactDOM from 'react-dom/client'
import { HashRouter } from 'react-router-dom'
import App from '@/App'
import 'normalize.css'
import './assets/css/index.less'
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
<Suspense fallback='loading'>
<HashRouter>
<App />
</HashRouter>
</Suspense>,
)
热门推荐
全面指南:如何选择适合你的新能源汽车
优化中职计算机基础教学:2025年教案编写指南
中国大陆时间和美国时间相差多少?
尿液检测蛋白质+1是什么意思
喜看蓝图变实景:雄安新区建设发展纪实
民事诉讼被告怎么举证
安卓系统手机内存融合(内存扩展)功能使用建议
如何选择适合的12V陶瓷电容器?
如何礼貌地询问工资待遇:职场沟通的艺术
未来十年,中国经济发展的趋势
如何通过渗透测试记录提升网络安全?
买“驱蚊神器”,一定要看这些成分!
LPR连续4个月按兵不动:如何理解“择机调整优化政策力度和节奏”
房产交易全流程指南:如何保障买卖双方权益?
需求收集的八大方法及实施步骤详解
旅途贵宾:乘机行李托运,避免丢失,如何正确标识和识别行李?
乐山这7个古镇,太适合秋天去漫步了!
链游开发核心:基于DApp合约的经济模型与安全架构设计
如何选择最适合你的PMP培训机构:5个关键因素
手机整机测试项目描述:全面解析与深度剖析,让你秒懂测试流程
猎头顾问的面试辅导指南:从准备到跟进的全方位提升
美联储降息专题 | 降息风暴下的黄金盛宴:历史数据揭秘金价未来
美联储降息如何影响黄金市场?从通胀预期到投资组合调整的全面解析
超详细自制蛋糕指南,新手小白也能一次成功
Win11系统如何设置自动锁屏时间
我国企业如何应对反倾销调查
从8千工资到手5千,如何优化财务规划,提升生活质量
如何寻找上涨较快的股票?这些股票有哪些特征?
揭秘“永不落地的鸟”:雨燕如何在空中完成一生
电脑怎么打下划线:轻松掌握的小技巧