创建项目
npx create-react-app ** --template typescript
,其中**
是项目名字,如果在当前空文件夹下面创建,直接输入一个点就可以了。
如果出现安装依赖失败,仔细阅读提示,很有可能是使用的 node 版本不对,其中有一个包要求指定版本或者大约 15 版本的 node,这个要注意。
如果运行时依赖有问题,很可能是因为上一步中断导致的问题,删除全部文件重新执行创建命令。
项目配置
baseUrl
根路径设置。打开tsconfig.json
文件,在compilerOptions
对象当中添加baseUrl: './src'
即可设置文件根绝对路径。添加项目级的 prettier。文档
yarn add --dev --exact prettier
echo {}> .prettierrc.json
创建.prettierignore
文件然后写入
js build coverage
添加 commit 钩子自动格式化代码npx mrm lint-staged
应该在 package.json 里面自动插入了一条lint-staged
命令,查看一下有没有 hook 命令,没有的话手动加一下js "husky": { "hooks": { "pre-commit": "lint-staged" } },
添加 Eslint。
yarn add eslint-config-prettier -D
,在 package 里面 eslintConfig->extends 里面添加一条prettier
。这条的意思是 prettier 格式化和 eslint 时有冲突,这里我们用 prettier 的部分规则覆盖了 eslint 的部分规则。注意,部分情况下可能出现 prettier 已经解决了 eslint 的冲突,但是格式化的情况下没有自动修复,你需要右键 格式化代码(vscode),给文件(ts) 配置默认的格式化程序,选择 prettier 就可以了。添加
commitlint
,用于 git 提交检查。npm install --save-dev @commitlint/{config-conventional,cli}
先装两个插件,echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
执行创建一个文件。没有husky
的话,先装一个 husky1
2
3
4
5
6"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},加一个 hook 命令,然后提交的时候就按照规范提交,例如
feat: some msg
注意feat:
是固定的,别忘了空格不然也不通过。文档npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
执行这个命令,加到 hook 里面才行添加
json-server
用于 mock 数据。npm install -g json-server
,项目里面创建一个 db.json 用于存储数据,然后json-server --watch db.json
启动一个服务器。此 mock 方式主要是简单快捷,并且严格遵循 restful api 方式,前后端数据同步。文档
跨域处理
之前写了个命令启动 json-server 提供 mock 数据"server": "json-server --watch ./__json_server_mock__/db.json --port=3002"
,但是由于接口不同调用会跨域,可以在 package.json 里面添加一行"proxy": "http://127.0.0.1:3002"
用以消除跨域。
Hooks
大部分情况都可以看文档。熟练使用自定义 hook
css in js
安装一个 vscode 插件vscode-styled-components
ws 插件Styled components & Styled JSX
安装 emotion
安装 Antd 和配置主题
yarn add antd
在 index.tsx 文件引入 less 文件
import 'antd/dist/antd.less'
yarn add @craco/craco
安装 cracoyarn add craco-less
新建根目录
craco.config.js
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const CracoLessPlugin = require('craco-less')
module.exports = {
plugins: [
{
plugin: CracoLessPlugin,
options: {
lessLoaderOptions: {
lessOptions: {
modifyVars: { '@primary-color': '#1DA57A' },
javascriptEnabled: true,
},
},
},
},
],
}更改完配置之后重新启动一下
自定义配置
React代码分割
使用之前:
1 | import OtherComponent from './OtherComponent'; |
使用之后:
1 | const OtherComponent = React.lazy(() => import('./OtherComponent')); |
高花费组件可以使用React.memo 进行处理,与其props无关的状态改变不影响此组件的渲染
也可以使用 Profiler Api组件进行性能追踪,同样的因为有开销不建议在生产环境中使用
React测试
除了默认装有的测试工具还需要安装一个 yarn add @testing-library/react-hooks msw -D
Jest测试文件示例:
1 | import { setupServer } from "msw/node"; |
有个 npm 包可以自定义配置 customize-cra
React 路由
首先安装 6 版本及以上的 react-router yarn add react-router@6 react-router-dom@6
之后在根组件内部
1 | import { BrowserRouter as Router, Link } from 'react-router-dom' |
1 | function App() { |
之后参考文档即可完成开发 React-router
Redux
redux-thunk
这个中间件的作用就是把输入的函数执行一遍,起到异步 dispath 和普通的 dispatch 一样的写法。
redux-toolkit
这里使用了这个库,这个库相当于 redux 的结合写法,合并了一些中间件然后对写法做了更改。
首先进行安装:yarn add react-redux @reduxjs/toolkit
创建 store.ts 文件
1 | import { configureStore } from '@reduxjs/toolkit' |
根组件传入 store
1 | import React from 'react' |
对应的数据切片创建对应的文件
1 | import { createSlice, PayloadAction } from '@reduxjs/toolkit' |
在 store 文件收集并注入 reducers
1 | import { configureStore } from '@reduxjs/toolkit' |
使用方式
1 | import React from 'react' |