美文网首页
Redux Middleware

Redux Middleware

作者: Moon_Yue | 来源:发表于2016-02-28 10:17 被阅读153次

以记录日志为示例来说明


尝试#1:手动记录

let next = store.dispatch
store.dispatch = function dispatchAndLog(action) {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

尝试#2:隐藏Monkeypatching

function logger(store) {
  let next = store.dispatch

  // 我们之前的做法:
  // store.dispatch = function dispatchAndLog(action) {

  return function dispatchAndLog(action) {
    console.log('dispatching', action)
    let result = next(action)
    console.log('next state', store.getState())
    return result
  }
}

尝试 #3: 移除 Monkeypatching

function logger(store) {
  return function wrapDispatchToAddLogging(next) {
    return function dispatchAndLog(action) {
      console.log('dispatching', action)
      let result = next(action)
      console.log('next state', store.getState())
      return result
    }
  }
}

这正是的 Redux middleware 的样子。

Middleware 接收了一个 next() 的 dispatch 函数,并返回一个 dispatch 函数,返回的函数会被作为下一个 middleware 的 next(),以此类推。由于 store 中类似 getState() 的方法依旧非常有用,我们将 store 作为顶层的参数,使得它可以在所有 middleware 中被使用。

// 警告:这只是一种“单纯”的实现方式!
// 这 *并不是* Redux 的 API.

function applyMiddleware(store, middlewares) {
  middlewares = middlewares.slice()
  middlewares.reverse()

  let dispatch = store.dispatch
  middlewares.forEach(middleware =>
    dispatch = middleware(store)(dispatch)
  )

  return Object.assign({}, store, { dispatch })
}

最终的方法

const logger = store => next => action => {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

参考文档:
Redux Middleware

相关文章

  • 浅析Redux 的 store enhancer

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

  • redux middleware

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

  • Redux Middleware

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

  • react 面试

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

  • redux中的middleware解析

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

  • redux-applyMiddleware

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

  • redux middleware 解读

    middleware 什么是middleware,个人理解就是一个可以让你在dispatch action的时候,...

  • redux-middleware

    middleware作用:在到达原始reducer之前通过middleware做一些处理。middleware通过...

  • redux源码图解:createStore 和 applyMid

    在研究 redux-saga时,发现自己对 redux middleware 不是太了解,因此,便决定先深入解读一...

  • redux-thunk和middleware的对比

    一、 redux-thunk和一般middleware的区别和相同点: 相同点:redux-thunk其实就是re...

网友评论

      本文标题:Redux Middleware

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