在 redux 中写 thunks for dispatch 时,"next" 和 "store.dispatch" 有什么区别?
In redux when writing thunks for dispatch, what's the difference between "next" and "store.dispatch"?
在视频课程中: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
前进到下一个中间件,但如果下一个中间件最终也调用分派,为什么我要使用 store.dispatch
而不是 next
?
正如您已经指出的那样,next
仅调用链中的下一个中间件。虽然它最终确实调用了原来的dispatch函数,但是当你想再次遍历整个链时使用它是不合适的。在 thunk 的情况下,您想遍历整个链。
因此,如果您正在创建一个中间件,您希望在其中做一些工作然后继续沿着链向下,请使用 next
。例如,记录器执行此操作:记录操作、调用 next
,然后记录结果状态。 return 将遍历整个链的回调,return store.dispatch
。您似乎不太可能希望从中间件 return next
,因为您可能会假设您不知道当前中间件之前和之后的中间件,因此在外部调用它的结果中间件链的不可预测性。
在视频课程中: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
前进到下一个中间件,但如果下一个中间件最终也调用分派,为什么我要使用 store.dispatch
而不是 next
?
正如您已经指出的那样,next
仅调用链中的下一个中间件。虽然它最终确实调用了原来的dispatch函数,但是当你想再次遍历整个链时使用它是不合适的。在 thunk 的情况下,您想遍历整个链。
因此,如果您正在创建一个中间件,您希望在其中做一些工作然后继续沿着链向下,请使用 next
。例如,记录器执行此操作:记录操作、调用 next
,然后记录结果状态。 return 将遍历整个链的回调,return store.dispatch
。您似乎不太可能希望从中间件 return next
,因为您可能会假设您不知道当前中间件之前和之后的中间件,因此在外部调用它的结果中间件链的不可预测性。