在视频课程中:https://egghead.io/lessons/javascript-redux-dispatching-actions-asynchronously-with-thunks我们学会编写自己的thunk,以便我们可以在动作创建器中进行异步和多次调度调用 . 我在很大程度上理解这一点 .
但是,我很困惑为什么我们在thunk中使用了 store.dispatch
而不是 next
:
const thunk = (store) => (next) => (action) =>
typeof action === 'function' ?
action(store.dispatch) :
next(action);
为什么会使用 next
与 store.dispatch
,反之亦然?我知道 next
前进到下一个中间件,但如果下一个中间件最终也调用dispatch,为什么我会使用 store.dispatch
而不是 next
?
1 回答
正如您已经指出的那样,
next
只调用链中的下一个中间件 . 虽然它最终会调用原始的调度函数,但是当您想要再次遍历整个链时,使用它是不合适的 . 在thunk的情况下,你想遍历整个链 .因此,如果您要创建一个中间件,您想要做一些工作,然后继续沿着链,请使用
next
. 例如, Logger 执行此操作:它记录操作,调用next
,然后记录结果状态 . 要返回将遍历整个链的回调,请返回store.dispatch
. 您似乎不太可能希望从中间件返回next
,因为您可能会认为您不知道当前中间件之前和之后出现了哪些中间件,因此在中间件链之外调用它的结果是不可预测的 .