美文网首页react-native
redux中的Middleware

redux中的Middleware

作者: LYF闲闲闲闲 | 来源:发表于2017-05-15 21:57 被阅读15次

1. 什么是middlewware

  • 是dispatch分发action和action到达reducer的中间件

2. 为什么要用middleware

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

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

  • reducer 更关心的是数据的转化逻辑
  • redux 借鉴了 koa 里中间件的思想
  • redux 的 middleware 是为了增强 dispatch 而出现
  • 同步异步
    • 同步操作只要发出一种 Action 即可
    • Redux 本身不处理异步行为,需要依赖中间件。结合 redux-actions 使用,Redux 有两个推荐的异步中间件:redux-thunk redux-promise
      后期会继续更新~

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
    }
  }
}
  • applyMiddleware:接收原来的creatStore做参数,返回一个应用了middleware的增强后的creatStore(...store,dispatch)

  • middlewareAPI:每个 middleware 都可以访问 store,即 middlewareAPI 这个变量,所以就可以拿到 store 的 dispatch 方法

  • chain:是一个数组,假设chain为[m1, m2, m3],经过compose后,dispatch为m1(m2(m3(store.dispatch)))

  • compose:是函数式编程中的组合,compose 将 chain 中的所有匿名函数,[f1, f2, ... , fx, ..., fn],组装成一个新的函数,即新的 dispatch

相关文章

  • 浅析Redux 的 store enhancer

    相信大家都知道Redux的middleware(中间件)的概念,Redux通过middleware可以完成发送异步...

  • redux中的Middleware

    1. 什么是middlewware 是dispatch分发action和action到达reducer的中间件 2...

  • redux-applyMiddleware

    redux 中的middleware思想还是很巧妙地,先来看下怎么使用 就是将middleware 使用apply...

  • redux middleware

    middleware redux middlewarwe middleware 提供了一个分类处理 action ...

  • redux middleware 理解中

    redux@4.0.0 logger()(dispatch) 返回的是最里层的函数,该函数作为参数传递给了thun...

  • Redux中middleware小结

    为什么出现middleware? 为了解决异步操作。 middleware如何处理异步的? Action 发出以后...

  • redux中的middleware解析

    为什么需要middleware 在没有middleware之前,Redux的工作流程是这样的 理解middlewa...

  • 关于redux中的Middleware

    什么是Redux中间件 ? redux 提供了类似后端 Express 的中间件概念,本质的目的是提供第三方插件的...

  • Redux Middleware

    以记录日志为示例来说明 尝试#1:手动记录 尝试#2:隐藏Monkeypatching 尝试 #3: 移除 Mon...

  • react 面试

    react redux (所有数据都放入redux管理) 1、redux中间件原理(middleware) 中间件...

网友评论

    本文标题:redux中的Middleware

    本文链接:https://www.haomeiwen.com/subject/ieohxxtx.html