【问题标题】:Redux action creators with nested closures带有嵌套闭包的 Redux 动作创建器
【发布时间】:2017-12-28 14:42:11
【问题描述】:

有没有一种方法可以在 Redux 的动作创建器中返回多个嵌套闭包?

考虑一个 log 动作创建者,它可以写成 4 个嵌套函数,而不是接受 log(topic, level, message),每个函数只接受整个参数的一个范围,如 topic => level => message => (dispatch, getState)

直截了当:

function log(topic, level, message) {
  return {type: 'LOG', topic, level, message };
}

嵌套:

function log(topic) {
  return function(level) {
    return function(message) {
      return function(dispatch, getState) {
        dispatch({ type: 'LOG', topic, level, message });
      }
    }
  }
}

Redux-thunk

我知道 redux-thunk 正在使用类似的模式,利用 Redux 中间件系统来提供异步操作创建器,但无法使其符合我想要的模式。

【问题讨论】:

    标签: reactjs redux flux redux-thunk currying


    【解决方案1】:

    使用普通的 redux,所有操作函数都必须返回一个简单的 JavaScript 对象。 thunk 之类的中间件允许您返回 thunk 中间件将解析为最终 JavaScript 对象以供 redux 处理的函数。我看到的模式是该函数返回一个带有单个参数的函数,dispatch:

    function log(topic, level, message, getState) {
      return function(dispatch) {
        dispatch(function(dispatch) {
          dispatch (function(dispatch) {
            dispatch({ type: 'LOG', topic, level, message });
          });
        });
      });
    }
    

    请注意,这未经测试。希望这能让您大致了解。

    【讨论】:

    • 这给了我多个分派的想法,这很好,但仍然不能解决实际问题。日志是否可以分解为多个单参数函数?类似于部分应用?
    • @FarzadYZ 我不知道。我不知道您将如何将参数传递给其他函数?
    • 问题确实是传递给中间函数的参数。也许这不仅仅是可行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多