返回

Redux中Middleware的作用及applyMiddleware的原理

前端

什么是Middleware?

Middleware是一个在Redux数据流中介于action和reducer之间的函数。当action被发起后,它会先经过Middleware,然后才到达reducer。Middleware可以拦截action,进行一些处理,然后再将处理后的action传递给reducer。

Middleware的作用

Middleware可以做很多事情,比如:

  • 修改action:Middleware可以修改action的内容,比如增加或删除属性。
  • dispatch多个action:Middleware可以一次dispatch多个action,从而实现复杂的业务逻辑。
  • 在服务器端完成某些操作:Middleware可以发起HTTP请求,或者调用其他外部API。

如何使用Middleware?

Redux提供了一个applyMiddleware函数,可以将Middleware应用到Redux Store中。applyMiddleware函数的参数是一个数组,数组中的每个元素都是一个Middleware函数。

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

const store = createStore(
  reducer,
  applyMiddleware(thunk)
);

Middleware的原理

Middleware函数是一个高阶函数,它接收一个Redux Store作为参数,并返回一个增强版的Redux Store。增强版的Redux Store拥有Middleware函数的功能,它可以在action被发起后,对action进行处理。

Middleware函数的内部实现通常是这样:

function middleware(store) {
  return function (next) {
    return function (action) {
      // 对action进行处理
      next(action);
    };
  };
}
  • store:Redux Store。
  • next:下一个Middleware函数,或者reducer。
  • action:被发起的action。

Middleware函数首先会对action进行处理,然后调用next函数将处理后的action传递给下一个Middleware函数,或者reducer。如果当前Middleware函数是最后一个Middleware函数,那么next函数就是reducer。

常见的Middleware

Redux中有许多常见的Middleware,比如:

  • thunk:thunk是一个用于异步action的Middleware。它允许你在action中使用函数,而不是普通对象。
  • saga:saga是一个用于管理副作用的Middleware。它允许你在action中定义生成器函数,并在生成器函数中使用yield来管理副作用。
  • redux-observable:redux-observable是一个基于RxJS的Middleware。它允许你使用RxJS的流来管理副作用。

总结

Middleware是Redux中一个非常强大的工具,它可以让你在action被发起后,对action进行处理,从而实现复杂的业务逻辑。常用的Middleware包括thunk、saga和redux-observable。