Redux中间件中dispatch和next之间有什么区别?

Hél*_*rdt 22 redux

Redux中间件中dispatch和next之间有什么区别?

export default function sampleMiddleware(store) {
  return next => action => {
   store.dispatch(action)
   next(action)
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 29

Dispatch启动新操作,并且它通过完整的中间件链.

下一步 - 将当前操作发送到链中的下一个中间件.

  • @mangocaptain,按照我的理解,在中间件内部,`next` 在下一个中间件上移动,而 `store.dispatch` 在中间件管道的开头放置给定的动作。如果是这样,你可以用`store.dispatch` 创建一个无限循环,但你不能用`next`。 (2认同)

zlo*_*ctb 6

createStore(reducer,
 applyMiddleware(
 middlewareA,
 middlewareB,
 middlewareC
 )
);
Run Code Online (Sandbox Code Playgroud)

在MiddlewareB中调用next(action)将导致该动作先传递给MiddlewareC,然后传递给reducer。在中间件B中调用dispatch(action)将导致该操作先传递给中间件A,然后传递给中间件B,然后传递给中间件C,最后传递给Reducer,然后将执行返回给中间件B。多次调用dispatch()是一种常见且有效的做法。next()也可以被多次调用,但是不建议这样做,因为传递给next()的任何操作都将跳过当前中间件之前的中间件(例如,可能会跳过日志记录中间件)。