中间件

什么是中间件?
中间件就是插在源到目标之间的一段逻辑(通常为函数,好比redux)html

redux中源为页面,目标为store中的state,经过dispatch将页面中的数据反映到store中redux

koa中源为request,目标为response,框架

redux中在dispatch数据到store只调用了dispatch这个函数,因此只能对这个函数进行改造,中间去插入中间件。koa

为何redux须要中间件?
dispatch函数第一句话:异步

if (!isPlainObject(action)) {
      throw new Error(
        'Actions must be plain objects. ' +
          'Use custom middleware for async actions.'
      )
    }

isPlainObject函数的目的是检查action是否是对象字面量或者new object()构造出来的对象,其余的好比action为函数,redux直接报错。好比异步请求,须要将从接口请求到的数据放到redux。
咱们能够直接发起异步请求,而后将数据dispacth到redux里
redux@4.0.0 shopping-cart actions/index.jsasync

export const checkout = products => (dispatch, getState) => {
  const { cart } = getState()

  dispatch({
    type: types.CHECKOUT_REQUEST
  })
  shop.buyProducts(products, () => {
    dispatch({
      type: types.CHECKOUT_SUCCESS,
      cart
    })
  })
}

为了统一写异步请求,将请求函数放在一个文件里,这样不会显得杂乱。可是dispatch跟getState怎么拿到,connect后能够拿到dispatch,getState拿不到,只能经过mapStateToProps传递state.这么操做比较麻烦,在中间件中统一处理就不须要每次调用传递dispatch getState。怎么对一个函数函数改造 插入中间件?函数

深刻理解洋葱模型中间件机制
Koa 框架教程post

相关文章
相关标签/搜索