React-Redux 源码解析 二(middleware)

前言

上一章节 我们已经解析了ReduxcreateStore 的基本使用方法。其中有涉及到第三个参数enhancer, 其对应的就是中间件的概率,我们这一章节我对其进行简单的分析.

Demo

下面代码是一个我们使用了中间件的一个简单的demo 我可以根据下面的步骤执行脚本,可以运行demo 查看效果:

1 git clone git@github.com:bluebrid/redux-learning.git

2 git fetch

3 git checkout middleware

4 npm i

5 npm start

下面是创建一个有中间件的Store 的demo:

import { createStore, applyMiddleware, compose } from '../redux'
import thunk from '../reduxThunk'
import { createLogger } from 'redux-logger'
import api from '../middleware/api'
import rootReducer from '../reducers'
import DevTools from '../containers/DevTools'

const configureStore = preloadedState => {
  const store = createStore(
    rootReducer,
    preloadedState,
    compose(
      applyMiddleware(thunk, api, createLogger()),
      DevTools.instrument()
    )
  )
  if (module.hot) {
    module.hot.accept('../reducers', () => {
      store.replaceReducer(rootReducer)
    })
  }

  return store
}

export default configureStore
复制代码

下面我们会针对这个代码,进行一步步深入的分析。

compose

从第一章节,我们已经知道第三个参数是一个enhancer ,其实也就是一个中间件的概念,但是为我们从上面的脚本看到,第三个参数居然是执行了一个compose 的方法, 我接下来就分析下这个compose 方法,代码:

export default function compose(...funcs) {
  if (funcs.length === 0) {
    return arg => arg
  }
  if (funcs.length === 1) {
    return funcs[0]
  }
  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
复制代码

如果传入的中间件的个数为:0,返回一个空函数,则相当于什么也不操作, 如果传入的参数长度为: 1, 则直接返回这个函数, 下面才是重点,return funcs.reduce((a, b) => (...args) => a(b(...args)))

TODO.....


作者:bluebrid
链接:https://juejin.im/post/5b8cf2e86fb9a01a20229635
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值