Redux中间件currying

时间:2016-06-05 10:20:17

标签: redux

我脑子里有这个问题,不确定这是否有效,下面是redux中间控制台退出商店的一个例子。

const logger = store => next => action => {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

我可以看到它使用 currying ,因此在redux中调用logger(store)(store.dispatch)(action)(如果我错了,请纠正我)。我的问题是为什么我们在这里讨论而不是

(store, next, action) => { // do the rest }

感谢您的任何建议,我正在慢慢进入函数式编程,以便让我的节奏更快。

1 个答案:

答案 0 :(得分:1)

我认为redux希望为开发人员提供三个钩子。

我们可以将调用链logger(store)(next)(action)拆分为

let haveStoreAndDispatch = logger(store);
let haveNext = haveStoreAndDispatch(next);
let haveAction = haveNext(action);

然后我们得到三个钩子函数。 在haveStoreAndDispatch回调函数中,已创建商店 在haveNext回调函数中,我们获得了下一个中间件 在HaveAction回调函数中,我们可以使用之前的中间件的结果action执行某些操作。

回调haveStoreAndDispatchhaveNext只能在applyMiddleware(...middlewares)(createStore)中调用一次。