Hooks异步请求实例-useReducer、useContext和useEffect替代Redux
背景
Hooks从诞生至今已经有了长足的进步,不得不说hooks的出现是React的一个标志性里程碑。用hooks来解决开发中的问题大大提升了我们日常工作的效率,本文是针对 异步请求数据 的一个案例,目前只针对useReducer、useContext、useEffect进行探讨,同时还需要使用过Redux进行过异步action添加。
扫码加微信前端二、三群(一群已满) :BAT大厂资深大牛定期推送面经与源码分析,各平台大牛优秀文章推荐,更有内推跳槽咨询、视频资源共享、学习资料文章pdf面经网盘资源等等福利。加入我们一起进步。
群内分享每日一题: 题目传送门
前端电子书大全: 电子书
非Hooks实现方案
在React的生命周期中(初学请参考: 安大虎:使用setState对数据进行同步、异步操作 ),我们知道componentDidMount里我们最适合去进行异步请求,因此在不需要考虑状态管理时,这种方法很简单:
class App extends React.Component{
componentDidMount(){
axios.get('/your/api')
.then(res=>/*...*/)
随后引入Redux进行状态管理
当你决定使用
Redux
进行状态管理时,比如将异步获取到的数据储存在
store
中,事情就开始复杂起来了。根据
Redux
的官方文档案例来看,为了实现异步
action
,你还得需要一个类似于redux-thunk、redux-saga的第三方库来解析你的异步
action
。
(没用过redux可以参考: 安大虎:React-Redux实现无关联组件props传值 )
Action.js: 定义异步请求action的地方
//这是一个异步action,分发了两个同步action,redux-thunk能够理解它
const fetchGoodsList = url => dispatch => {
dispatch(requestGoodsList());
axios.get(url)
.then(res=>{
dispatch(receiveGoodsList(res.data))
Reducer.js: 处理同步action
const requestReducer=(state=initialState,action)=>{
switch (action.type) {
case REQUEST_GOODSLIST:
return Object.assign({},state,{
isFetching: true
case RECEIVE_GOODSLIST:
return Object.assign({},state,{
isFetching:false,
goodsList:action.goodsList
default:
return state;