React开发前一些个人配置
前言
在开发日常项目时,每次create-react-app后都要做一些重复性修改,比如说添加less的支持或者添加装饰器的支持,还有假如react-router或者redux的支持,于是这次将他们一次性封装完成,下次再次启动新项目时,就直接从自己的仓库中clone来开发就好。
弹出自定义配置
这是自定义cli的基础,以便我们修改cli的部分文件,记住又一个坑,必须要先git add . 和 git commit 后才能进行,要不然npm直接会报错。
运行npm run eject,操作之前切记需要git commit
热加载
一直很疑惑这个功能为啥原生脚手架不自动开启,对于我这种对css有极度强迫症的人来说,修改一点css后瞬间出效果,而不要再次刷新页面,简直提高了很多效率。
在index.js最后添加
1 | if (module.hot) { |
添加路由
这是开发SPA的基础,但是在实际开发过程中,this.props.history并不是在所有js文件中都能使用的,比如说在redux和封装的axios中,因为一般redux都是和组件拆分的,所以在antion函数中并不存在this.props.history这个对象,那怎么解决呢,在github上找到一个黑科技的解决方案,只要引入自己设置的history,无论是在哪里,都不需要用this.pros.history,直接使用自己封装的history,具体步骤如下:
- 下载router包
npm i react-router-dom -S
- 在src中的config文件夹下创建
history.js
1 | import createHistory from 'history/createBrowserHistory'; |
- 在index.js中引入
1 | import { BrowserRouter, Router } from "react-router-dom"; |
- 将App组件被路由所包裹
1 | ReactDOM.render( |
- 在container中创建Index组件,并在
app.js中添加以下代码
1 | import React, { Component } from 'react'; |
封装axios配置
记得刚刚入门的时候,对axios的使用基本上就停留在他的promise中,虽然听说过axios还有拦截器这一操作,但是一直未尝试,后来在开发中,实在忍受不了每个请求都要手动加上token,每个返回结果都要判断是否需要弹出错误提醒和请求超时再次重新请求,后来发现axios拦截器真是个神器,于是就在每次开启新的项目中,都先配置axios拦截,妈妈再也不需要担心我写多余重复的代码啦~
下载必要包
npm i axios在config文件夹中添加
axios.js
1 | import axios from 'axios' |
添加状态管理redux
redux在开发稍微复杂点的项目来说,提供了很多便利,所有的状态就在一个store中管理,将各个组件零零散散的状态集中起来,还能在各个组件中传递,这样在各个组件传递信息时候,就再也不需要写层层嵌套props的垃圾代码。
虽然前期学习成本有点高,但是领悟到了redux的思想后,便是一劳永逸,付出还是值得的。
- 安装必要包
npm i redux redux-thunk react-redux -S
在src中添加
redux文件以及reducer.js文件夹在
redux中创建article.redux.js
1 | import axios from "../config/axios" |
- 在
reducer.js中将redux集合
1 | import { combineReducers } from 'redux' |
- 在index.js中引入必要文件
1 | import { createStore, applyMiddleware, compose } from "redux"; |
- 创建
store
1 | const store = createStore( |
- 将App组件被redux包围
1 | <Provider store={store}> |
添加对装饰器的支持
第一次接触装饰器还是在阮大大中ES6入门上看到的,当时似懂非懂地理解,后来在实际项目中也没怎么用到过,直到后来在react-router中的withRouter用法时,才明白装饰器是怎么回事,但是目前脚手架原生并不支持,所以需要自己配置babel。
- 安装装饰器的babel
npm i babel-plugin-transform-decorators-legacy -D
- 在package.json中设置babel参数
1 | "babel": { |
配置less
这个就不用多说,less比起其他的预编译器来说,能够在其中写原生css,没有很多限制,并且也有其他预编译器的功能,所以是我期待的。
1.安装必要包
npm i less less-loader -D
2.修改根目录config中的webpack配置文件1
2
3
4
5
6
7{
test: /\.(css|less)$/,
use: [
{
loader: require.resolve('less-loader') // compiles Less to CSS
}
]