Redux 本身是同步的,但它能执行异步代码是因为引入了中间件(middleware)来处理异步操作。Redux 中间件是一个位于 action 和 reducer 之间的拦截器,它可以拦截到发起的异步操作,并在适当的时机派发相应的 action。
常见的 Redux 中间件如 redux-thunk 和 redux-saga 提供了不同的处理异步操作的方式。
redux-thunk:使得 action 可以是一个函数,这个函数会接收 dispatch 和 getState 作为参数,可以在函数中进行异步操作,并在适当的时机派发真正的 action。
redux-saga:基于 Generator 函数的方式,通过创建 Sagas 来处理异步操作。Sagas 是一个以非阻塞方式运行的独立线程,可以拦截和处理多个并发的异步调用,提供了更强大的控制异步流程的能力。
redux-logger:用于日志记录
Redux 中间件的实现原理是利用函数柯里化和闭包的特性,在传入的 action 函数中执行异步操作,并在合适的时机派发真正的 action。