首页 男生 其他 深入浅出React和Redux

9.2.1 增强器接口

深入浅出React和Redux 程墨 2534 2021-04-06 02:29

  您可以在百度里搜索“深入浅出React和Redux 艾草文学(www.321553.xyz)”查找最新章节!

  

  9.2.1 增强器接口

  Redux提供的创建Store的函数叫createStore,这个函数除了可以接受reducer和初始状态(preloadedState)参数,还可以接受一个Store Enhancer作为参数,Store Enhancer是一个函数,这个函数接受一个createStore模样的函数为参数,返回一个新的createStore函数。

  所以,一个什么都不做的Store Enhancer长得这个样子,代码如下:

  const doNothingEnhancer = (createStore) => (reducer, preloadedState, enhancer) => {

  const store = createStore(reducer, preloadedState, enhancer);

  return store;

  };

  上面的例子中,最里层的函数体可以拿到一个createStore函数对象,还有应该传递给这个createStore函数对象的三个参数。所以,基本的套路就是就是利用所给的参数创造出一个store对象,然后定制store对象,最后把store对象返回去就可以。

  注意

  在实际执行过程中,这里的createStore参数未必是Redux默认的createStore函数,因为多个增强器也可以组合使用,所以这里接收到的createStore参数可能是已经被另一个增强器改造过的函数。当然,每个增强器都应该互相独立,只要遵循统一接口,各个增强器可以完全不管其他增强器的存在。

  实现一个Store Enhancer,功夫全在于如何定制产生的store对象。

  一个store对象中包含下列接口:

  ·dispatch

  ·subscribe

  ·getState

  ·replaceReducer

  每一个接口都可以被修改,当然,无论如何修改,最后往往还是要调用原有对应的函数。

  例如,如果我们想要增强器给每个dispatch函数的调用都输出一个日志,那么就实现一个logEnhancer,代码如下:

  const logEnhancer = (createStore) => (reducer, preloadedState, enhancer) => {

  const store = createStore(reducer, preloadedState, enhancer);

  const originalDispatch = store.dispatch;

  store.dispatch = (action) => {

  console.log('dispatch action: ', action);

  originalDispatch(action);

  }

  return store;

  };

  增强器通常都使用这样的模式,将store上某个函数的引用存下来,给这个函数一个新的实现,但是在完成增强功能之后,还是要调用原有的函数,保持原有的功能。在上例中,我们想要增强dispatch函数,先把store.dispatch的实现存在originalDispatch变量中,这样在新的dispatch函数中就可以调用,保证不破坏Redux Store的默认功能了。

  增强器还可以给Store对象增加新的函数,下面我们就举一个这样的例子。 深入浅出React和Redux

目录
设置
手机
书架
书页
评论