Redux的使用详解(四)

95 阅读2分钟

组件中异步操作

在之前简单的案例中,redux中保存的counter是一个本地定义的数据

我们可以直接通过同步的操作来dispatch action,state就会被立即更新。

但是真实开发中,redux中保存的很多数据可能来自服务器,我们需要进行异步的请求,再将数据保存到redux中。

在之前学习网络请求的时候我们讲过,网络请求可以在class组件的componentDidMount中发送,所以我们可以有这样的结构:

理解中间件

redux也引入了中间件(Middleware)的概念:

这个中间件的目的是在dispatch的action和最终达到的reducer之间,扩展一些自己的代码;

比如日志记录、调用异步接口、添加代码调试功能等等;

我们现在要做的事情就是发送异步的网络请求,所以我们可以添加对应的中间件:

这里官网推荐的、包括演示的网络请求的中间件是使用 redux-thunk;

redux-thunk是如何做到让我们可以发送异步的请求呢?

我们知道,默认情况下的dispatch(action),action需要是一个JavaScript的对象;

redux-thunk可以让dispatch(action函数),action可以是一个函数;

该函数会被调用,并且会传给这个函数一个dispatch函数和getState函数;

dispatch函数用于我们之后再次派发action;

getState函数考虑到我们之后的一些操作需要依赖原来的状态,用于让我们可以获取之前的一些状态;

如何使用redux-thunk

1.安装redux-thunk

2.在创建store时传入应用了middleware的enhance函数

通过applyMiddleware来结合多个Middleware, 返回一个enhancer;

将enhancer作为第二个参数传入到createStore中;

3.定义返回一个函数的action:

注意:这里不是返回一个对象了,而是一个函数;

该函数在dispatch之后会被执行;

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情