react-native

redux中的Middleware

2017-05-15  本文已影响15人  LYF闲闲闲闲

1. 什么是middlewware

2. 为什么要用middleware

一般我们使用 action——dispatcher——reducers 时同步情况很好,但是如果需要异步的情况就不是很好了。我们希望可以先去服务器请求数据,在渲染界面,或者是希望可以进行异步的操作

仅仅只修改dispatch和reducer就不能满足,所以需要加上中间件,原因如下所示:

3. 如何使用

基本格式如下:
next表示下一个中间件store和action不进行任何的动作

store => next => action => {
   ...
}

举个例子:

export default store=>next=>action=> {
    if (action.type === 'LOGIN_USER') {
        request.post('/login')
            .send({name: action.text.name, password: action.text.password})
            .end((err, res)=> {
                console.log("login:",res.body)
                next({type: "CHECK_USER", checkUser: res.body});
            })
    } else {
        next(action);    //下一个中间件
    }
}

4. 详解

redux 提供了 applyMiddleware 这个 api 来加载 middleware

import compose from './compose'
export default function applyMiddleware(...middlewares) {
  return (createStore) => (reducer, initialState, enhancer) => {
    var store = createStore(reducer, initialState, enhancer)
    var dispatch = store.dispatch
    var chain = []
    var middlewareAPI = {
      getState: store.getState,
      dispatch: (action) => dispatch(action)
    }
    chain = middlewares.map(middleware => middleware(middlewareAPI))
    dispatch = compose(...chain)(store.dispatch)
    return {
      ...store,
      dispatch
    }
  }
}
上一篇 下一篇

猜你喜欢

热点阅读