kenberkeley / redux-simple-tutorial

Redux 简明教程。本教程深入浅出,配套入门、进阶源码解读以及文档注释丰富的 Demo 等一条龙服务

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于文章中applyMiddleware(...middlewares)的问题

zaleGZL opened this issue · comments

/* 降低逼格写法 */
function printStateMiddleware(middlewareAPI) { // 记为【锚点-1】,中间件内可用的 API
  return function (dispatch) {                 // 记为【锚点-2】,传入上级中间件处理逻辑(若无则为原 store.dispatch)

    // 下面记为【锚点-3】,整个函数将会被传到下级中间件(如果有的话)作为它的 dispatch 参数
    return function (action) { // <---------------------------------------------- 这货就叫做【中间件处理逻辑哥】吧
      console.log('state before dispatch', middlewareAPI.getState())
  
      var returnValue = dispatch(action) // 还记得吗,dispatch 的返回值其实还是 action
  
      console.log('state after dispatch', middlewareAPI.getState())

      return returnValue // 继续传给下一个中间件作为参数 action   我感觉你这句话解释有问题
    }
  }
}

下一个中间件的action在这里是通过dispatch(action)传递的吧,(也就是next(action)),感觉这里有问题。

return returnValue // 继续传给下一个中间件作为参数 action 我感觉你这句话解释有问题

我觉得可以这样修改为:

/* 降低逼格写法 */
function printStateMiddleware(middlewareAPI) { // 记为【锚点-1】,中间件内可用的 API
    return function (dispatch) {                 // 记为【锚点-2】,传入上级中间件处理逻辑(若无则为原 store.dispatch)

        // 下面记为【锚点-3】,整个函数将会被传到下级中间件(如果有的话)作为它的 dispatch 参数
        return function (action) { // <---------------------------------------------- 这货就叫做【中间件处理逻辑哥】吧
            console.log('state before dispatch', middlewareAPI.getState())

            var returnValue = dispatch(action)
            // 还记得吗,dispatch 的返回值其实还是 action
            // 这里调用 dispatch 将 action 传递到下一个中间件,并且返回 action

            console.log('state after dispatch', middlewareAPI.getState())

            return returnValue // 将action返回给上一个中间件
        }
    }
}

感谢!