什么是中间件?
中间件就是插在源到目标之间的一段逻辑(一般为函数,比如redux)
redux中源为页面,目标为store中的state,通过dispatch将页面中的数据反映到store中
koa中源为request,目标为response,
redux中在dispatch数据到store只调用了dispatch这个函数,所以只能对这个函数进行改造,中间去插入中间件。
为什么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.js
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。怎么对一个函数函数改造 插入中间件?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。