从零开始搭建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>,
)
热门推荐
黑暗唯美的经典吸血鬼题材动画电影《吸血鬼猎人D》
草缸10大首选鱼虾的混养
水草缸养什么鱼?八大类观赏鱼详解
这40多所良心院校不歧视双非且保护第一志愿
基于ECharts的水质监测预警系统开发全解析
金刚石在散热领域内的多形态应用
怎么剥夺不孝子女的继承权
没有尽孝的子女能继承遗产吗?遗产继承相关法律问题全解析
探索三亚的精彩之旅:超详细景点分布地图让你不迷路!
如何计算上涨的相关数据?这些数据对投资分析有何意义?
鼻头长痘红肿疼怎么办
劳动法关于离职交接规定
离职需要书面提出吗?三个关键问题帮你理清离职权益
农历六月初二出生的人,命理学上具有怎样的命格特征
新车牌比绿牌还要丑!中国车牌的审美,为什么如此独特?
铁矿石:正套还是“万能法宝”吗?
自闭症会遗传么
Nature Medicine最新研究:孕期健康如何影响自闭症风险?
高三心理调适:缓解压力,轻松应对学习挑战
污水处理远程监控系统构成与功能
从自媒体到创业:如何利用自媒体项目赚取人生第一桶金
汕头最新经济数据公布!
胃癌的检测方法有哪些?
麦味地黄丸养肺护肺,5个临床应用,一文总结
为什么每次弯腰都疼痛难忍,弯不下去?
张弛语言课之普通话学习促进中国文化理解
DNS延迟列表:国内外常用DNS服务器对比
如何解决Win10系统中的热键冲突问题?
生成式AI技术快速发展带来多重挑战
Excel IF函数使用指南:从基础到高级应用