基于React 18+Typescript的网易云音乐

1,181 阅读3分钟

创建React项目

◼ 工具:React脚手架

create-react-app

 同时配置TypeScript的支持

npx create-react-app hy_ts_react_music --template typescript

image.png

◼ 项目配置:

 配置项目的icon

 配置项目的标题

image.png

 配置项目别名等(craco.config.ts)

 配置tsconfig.json

image.png

image.png

image.png

image.png

格式化代码

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 等语言,基本上前端能用到的文件格式它都可以搞定,是当下最流行的代码格式化工具。

  1. 安装prettier
npm install prettier -D
  1. 配置.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
}
  1. 创建.prettierignore忽略文件
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*
  1. VSCode需要安装prettier的插件
  2. VSCod中的配置
● settings =>format on save => 勾选上
● settings => editor default format => 选择 prettier

image.png 6. 测试prettier是否生效 7.

● 测试一:在代码中保存代码;
● 测试二:配置一次性修改的命令;
在package.json中配置一个scripts:"prettier": "prettier --write ."


使用ESLint检测

  1. 安装插件:
npm install eslint-plugin-prettier eslint-config-prettier -D

image.png

项目目录结构划分

image.png

CSS样式的重置

◼ 对默认CSS样式进行重置:

安装normalize.css

npm install normalize.css

 normalize.css

 reset.less

  • 配置less,使其生效
npm install craco-less@2.1.0-alpha.0

image.png

image.png

路由配置

  • 安装路由
npm install react-router-dom

VsCode通过snippet generator快速生成自定义代码片段

VsCode通过snippet generator快速生成自定义代码片段

路由懒加载

image.png

  • 在浏览器刷新时出现这种错误

image.png

  • 解决方法

image.png 可以看看这篇文章 React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快

一级路由配置

image.png

image.png

  • 让二级路由渲染在页面中

image.png

  • 要用占位符Outlet

  • 当产生嵌套时,渲染其对应的后续子路由 (类似于vue中router-view

【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet

image.png

  • 二级路由匹配不到
    

image.png

  • 解决方法:在discover前面加上/
    

image.png

全家桶 – 状态管理

◼ 状态管理的选择:

 redux: 目前React中使用最多的状态管理库;

 @reduxjs/toolkit: redux工具, 更方便的使用redux;

image.png 状态管理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里面,@符无效,所以找不到就报错 1673233821762.png

  • 换个antd的版本安装一下
  • 或者改用这种方法
import Button from 'antd';
const ButtonX: React.FC<any> = Button as any;
function App () {
    return <ButtonX />
}

ca6f9907fd8aaacd88a7210762266a5.png

部署本地环境

  1. npm run build 先打包
  2. npm install -g serve
  3. serve -s build 在本地跑起来

安装antd

# React - Ant Design4.x版本安装使用,并按需引入和自定义主题