创建React项目
◼ 工具:React脚手架
create-react-app
同时配置TypeScript的支持
npx create-react-app hy_ts_react_music --template typescript
◼ 项目配置:
配置项目的icon
配置项目的标题
配置项目别名等(craco.config.ts)
配置tsconfig.json
格式化代码
npm run prettier或者保存
集成editorconfig配置
# http://editorconfig.org
root = true
[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格(tab | space)
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行尾的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行
[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false
使用prettier工具
Prettier 是一款强大的代码格式化工具,支持 JavaScript、TypeScript、CSS、SCSS、Less、JSX、Angular、Vue、GraphQL、 JSON、Markdown 等语言,基本上前端能用到的文件格式它都可以搞定,是当下最流行的代码格式化工具。
- 安装prettier
npm install prettier -D
- 配置.prettierrc文件
● useTabs:使用tab缩进还是空格缩进,选择false;
● tabWidth:tab是空格的情况下,是几个空格,选择2个;
● printWidth:当行字符的长度,推荐80,也有人喜欢100或者120;
● singleQuote:使用单引号还是双引号,选择true,使用单引号;
● trailingComma:在多行输入的尾逗号是否添加,设置为 none ,比如对象类型的最后一个属性后面是否加一个,;
● semi:语句末尾是否要加分号,默认值true,选择false表示不加
{
"useTabs": false,
"tabWidth": 2,
"printWidth": 80,
"singleQuote": true,
"trailingComma": "none",
"semi": false
}
- 创建.prettierignore忽略文件
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*
- VSCode需要安装prettier的插件
- VSCod中的配置
● settings =>format on save => 勾选上
● settings => editor default format => 选择 prettier
6. 测试prettier是否生效
7.
● 测试一:在代码中保存代码;
● 测试二:配置一次性修改的命令;
在package.json中配置一个scripts:"prettier": "prettier --write ."
使用ESLint检测
- 安装插件:
npm install eslint-plugin-prettier eslint-config-prettier -D
项目目录结构划分
CSS样式的重置
◼ 对默认CSS样式进行重置:
安装normalize.css
npm install normalize.css
normalize.css
reset.less
- 配置less,使其生效
npm install craco-less@2.1.0-alpha.0
路由配置
- 安装路由
npm install react-router-dom
VsCode通过snippet generator快速生成自定义代码片段
VsCode通过snippet generator快速生成自定义代码片段
路由懒加载
- 在浏览器刷新时出现这种错误
- 解决方法
可以看看这篇文章
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
一级路由配置
- 让二级路由渲染在页面中
-
要用占位符Outlet
-
当产生嵌套时,渲染其对应的后续子路由 (类似于vue中router-view
【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
-
二级路由匹配不到
-
解决方法:在discover前面加上/
全家桶 – 状态管理
◼ 状态管理的选择:
redux: 目前React中使用最多的状态管理库;
@reduxjs/toolkit: redux工具, 更方便的使用redux;
状态管理redux
● 配置store
● configureStore
● Provider
● 创建slice
● name
● initialState
● reducers
● useSelector的类型问题 => state
● type IRootState ReturnType
● const useAppSelector: TypedUseSelectorHook = useSelector
● TypedUseSelectorHook内部的实现细节
● useDispatch抽取
● shallowEqual抽取
网络请求封装axios
- 安装axios
npm install axios
错误总结
应该是在安装插件时自动生成了那段代码,导致npm run start 错误
层级不一样,这个js文件不是在src里面,@符无效,所以找不到就报错
- 换个antd的版本安装一下
- 或者改用这种方法
import Button from 'antd';
const ButtonX: React.FC<any> = Button as any;
function App () {
return <ButtonX />
}
部署本地环境
- npm run build 先打包
- npm install -g serve
- serve -s build 在本地跑起来