redux入门 互动版

使用applyMiddleware

本小节我们将学会如何使用applayMiddleware

1、使用applayMiddleware

在前两个小节我们已经向大家介绍了异步actionCreator和异步中间件,这一小节我们可以做进一步的尝试。

applayMiddleware函数接受这样的参数

applyMiddleware(thunkMiddleware,middleware1,middleware2,...)(createStore);

它返回一个新的createStore函数,接下来你会发现,原来使用起来和同步没有多大区别

const finalCreateStore = applyMiddleware(thunkMiddleware,logMiddleware)(createStore);
const store_ = finalCreateStore(todoApp);
var unsubscribe =store_.subscribe(()=>{
  console.log(new Date());
  console.log(store_.getState());
})
store_.dispatch(addTodo('actionCreator'));
store_.dispatch(asyncActionCreator('asyncActionCreator'));

2、进一步学习applyMiddleware函数

大家可能会好奇applyMiddleware到底做了什么呢?

applyMiddleware函数其实就是将一个拓展的dispatch返回给我们。这个dispatch能干嘛呢?

我们可以简单的测试一下我们的applyMiddleware函数。我将打印action和打印时间的中间件分别放在异步中间件的左右

const finalCreateStore = applyMiddleware(logActionMiddleware,thunkMiddleware,logMiddleware)(createStore);
const store_ = finalCreateStore(todoApp);
store_.dispatch(addTodo('actionCreator'));
store_.dispatch(asyncActionCreator('asyncActionCreator'));

看我们得到了什么。

applyMiddleware

开始我们使用普通action,可以看到我们先打印出了action,后打印出时间。

在异步的时候我们发现,他先打印出异步的action函数,然后呢,我等了五秒,可以看到又打印了action和时间(dispatch在五秒后被调用)。

3、为什么会这样???我们结合下面的图来讲。

图片右边展示的是我们dispatch普通action时发生的,经过不同的中间件,将中间件函数业务代码叠加,最后通过dispatch执行所有中间件的业务代码

左边则是展示的异步action,他只会触发异步中间件之前的中间件,而后进入到action函数中,不会再经过异步中间件后的next

现在大家应该就能明白,为什么我们打印了action函数却没有打印时间了,没错,就是因为进入了异步action因此没有经过后面打印时间的中间件。

applyMiddleware

你可以在右方代码区测试异步todo,并打开控制台查看效果。