let newStore = applyMiddleware(mid1, mid2, mid3, ...)(createStore)(reducer, null);

给({ getState, dispatch }) => next => action签名的函数组分步赋值并进行串联的过程;

整体上是dispatch的method swizzling;

export default function applyMiddleware(...middlewares) {

return (next)  =>

(reducer, initialState) => {

var store = next(reducer, initialState);

var dispatch = store.dispatch;

var chain = [];

//({ getState, dispatch })

var middlewareAPI = {

getState: store.getState,

dispatch: (action) => dispatch(action)

};

//({ getState, dispatch })

chain = middlewares.map(middleware => middleware(middlewareAPI));

//next

dispatch = compose(...chain, store.dispatch);

return {

...store,

dispatch

};

};

}

export default store => next => action => {

console.log('dispatch:', action);

next(action);

console.log('finish:', action);

}

export default ({ getState, dispatch }) => next => action => {

console.log('dispatch:', action);

next(action);

console.log('finish:', action);

}

function compose(...funs) {

return arg => funcs.reduceRight( (compose, f) => f(composed), arg)

}

https://www.cnblogs.com/fe-linjin/p/10494763.html

https://stackoverflow.com/questions/41139585/what-is-the-next-in-applymiddleware

...middlewares (arguments): 遵循 Redux middleware API 的函数。每个 middleware 接受 StoredispatchgetState 函数作为命名参数,并返回一个函数。该函数会被传入 被称为 next 的下一个 middleware 的 dispatch 方法,并返回一个接收 action 的新函数,这个函数可以直接调用 next(action),或者在其他需要的时刻调用,甚至根本不去调用它。调用链中最后一个 middleware 会接受真实的 store 的 dispatch 方法作为 next 参数,并借此结束调用链。所以,middleware 的函数签名是 ({ getState, dispatch }) => next => action。

https://www.redux.org.cn/docs/api/applyMiddleware.html

最新文章

  1. 详解mmseg
  2. Java实现上传下载
  3. Python学习笔记3-字符串
  4. ios 消息通知
  5. 1004. Counting Leaves (30)
  6. iscsi 怎么搞
  7. R中的par()函数的参数
  8. object.assign()方法的使用
  9. c#部分---输入班级人数,输入语文数学英语成绩,打印语文前两名,数学后两名,英语平均分
  10. iOS开发——根据Url 获取图片尺寸
  11. 在oc代码中使用swift第三方框架
  12. CTE-递归[2]
  13. ulimit -n修改单进程可打开最大文件数目
  14. 使用Nginx+Lua(OpenResty)开发高性能Web应用
  15. Ubuntu新建用户
  16. Javascript随笔2(JQuery)
  17. 京东B2B业务架构演变
  18. 利用kibana插件对Elasticsearch进行映射
  19. firebug定位工具很强大
  20. MFC应用技术之CTreeControl的使用

热门文章

  1. 新博客 https://k8gege.org
  2. Java中的数据类型与运算符
  3. Akka-CQRS(11)- akka-http for http-web-service: Marshalling-数据序列化
  4. 移动端可视化框架antv f2出现两个legend选项
  5. 【题解】选数字 [51nod1354]
  6. golang 学习笔记 --基本类型
  7. RabbitMQ 的消息持久化与 Spring AMQP 的实现剖析
  8. 在excel实现多级联动
  9. wps金山文档在线编辑--.Net 接入指南
  10. python numPy模块 与numpy里的数据类型、数据类型对象dtype