从零开始搭建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>,
)
热门推荐
数据库模式对数据组织有何影响?分析数据库模式设计的最佳实践
解决与女友矛盾的方法 如何处理与女友的争吵问题
立春后铁线莲做好以下5件事,春天长势旺开花多
风水书籍排行榜前十名:黄帝宅经上榜,第二是中华文明源头
新能源汽车高压电气系统绝缘设计与测试方法(附:800V高压平台绝缘设计挑战)
2025 年你可以找到的 3 大最佳任天堂 Switch 模擬器
糖葫芦的传统文化意义与现代市场发展
眼周围雀斑的多种去除方法及日常护理建议
底部反转形态:平头底
八字入门之辛金日干如何取格局
如何测量食物的热量:科学方法大揭秘
如何在Windows 11中设置和管理虚拟内存
粉盒和硒鼓有什么区别
陕西神木市:西部第一县的特色转型发展之路
负反馈电路的优缺点,运算放大器反馈电路分析
为什么不爱运动的日本人很长寿?5个饮食与生活习惯揭秘
【家族文化】——探寻家族成员间称谓的雅致之道(珍藏版)
黄金价值波动如何受美国经济数据影响?这种影响对全球市场有何连锁反应?
圆周率的奥秘:轻松记忆无限数字
《三国杀OL》山河图套装攻略:山河图套装流派、战法详解!
法院判决强制执行流程是什么
打火机的分类与选购指南:从燃料到设计全方位解析
4种适合糖尿病人的杂粮面条
如何听懂客户的情绪管理
北交所明确IPO新要求,2024最新北交所上市条件详解!
弹力带训练肌肉8个方法!一条阻力带可训练胸肌、三头肌、背肌
写作时如何使用生动的描写
普通人怎样才能一步步走向成功?
以前审美VS现在审美,3组同一个角色对比,看看审美降级有多严重
黑鱼片在家庭厨房中的创新做法