从零开始搭建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大好处、功效一次看,脚跟痛改善超有感
上班族应该如何避免长期久坐的伤害?
MATLAB求解偏微分方程(PDE)教程
什么是虚拟运营商
如何评价施一公院士?
什么?诗圣杜甫竟然擅长书法?!
减脂期间力量训练方案:如何科学安排力量训练和有氧运动
老子哲学思想三十条人生启示(附《道德经》原文及现代解读)
“蝙蝠侠脱颖而出”:与漫威英雄相比,DC 如何定义黑暗骑士
木薯变性淀粉在各类食品中的应用
莲藕排骨汤的完美制作手册:经典做法与创意变体
春节从防城港到越南一日游
左侧桥小角区斜坡脑膜瘤的症状
装修官司需要哪些证据材料
收益分成是什么
如何清除苹果iPhone 15中与Siri的对话记录
晚上睡不着,长时间12点睡觉的危害,又该怎样改善睡眠质量?
无人机技术优势及发展详解
曹伟明:江南文化中的这抹“青绿”,是中国文化史上一种特有现象
研发团队人数怎么算
气质女人的穿搭秘诀:三个技巧让你提升回头率
结婚要避开生日月指的是谁的生日月
怎样判断新买的手机是不是翻新机,一招快速验证,不当冤大头
TPE材料脚垫真伪鉴别指南
股票中的MACD指标有何作用?这个指标如何辅助技术分析?
自身免疫性肝炎的症状及表现
机器学习中用来防止过拟合的方法有哪些
从SSL到TLS:SSL证书如何确保用户隐私安全
学习奥数对孩子有什么好处?
职场社交活动对人际关系有哪些重要作用