从零开始搭建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>,
)
热门推荐
特许经营项目规划全攻略:从市场调研到风险管理
新加坡入籍条件详解:居住时长与社区贡献如何计算
滑膜炎怎么诊断
滑膜炎的诊断与治疗
志愿者定期“上门探访”,暖了“老”朋友们的心
水电工程师如何管理项目
古代买一个丫鬟需要花多少钱?买回来之后可以做些什么呢?
《红楼梦》家庭关系分析:贵族世家的复杂家族纠葛
如何撰写有效的诉讼管辖权异议申请书
管辖权异议申请书审核流程及注意事项
女人不愿结婚的条件是:从法律角度解读婚姻选择权
如何评估户型设计的优势?户型图的线条如何帮助我们理解空间布局?
养老保险可以取出来吗?取出条件及流程详解
参加个人养老金后,可以中途把钱取出来吗?可以继承吗?
Epon与GPON:性能对比与选择指南
固态电池产业大事不断,10只滞涨股获机构密集调研
阿斯汤加的呼吸方法有哪些特点
如何在房产处理中遵循合法程序?这种合法程序如何严格执行?
金属的分类及其特性
依法采集,严格执业,无差别宣教下的脐血库怎么做的?
探寻璞玉之美:深入解析未雕琢天然美玉的珍贵价值
10种适合在家中阴凉处养殖的耐阴植物
五脏六腑对应身体部位是哪些
个人档案查询流程与方法
Hyper-V安装指南:硬件软件要求与安装步骤详解
人形机器人:未来社会的兼容性与效率的双重探索
探索地球与火星的热演化历史与磁场运行机制
东汉末年经济形势及其对社会秩序的影响
这个“长寿动作”,比走路还简单
怎样选购合适的衣柜