【问题标题】:How to understand this kind of syntax in Javascript Redux Middleware如何在 Javascript Redux 中间件中理解这种语法
【发布时间】:2017-03-12 12:02:03
【问题描述】:

我正在阅读这篇文章以从这个链接了解redux中间件:http://redux.js.org/docs/advanced/Middleware.html

以下代码是日志中间件的示例。

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

下面的部分我不明白:

const logger = store => next => action =>

这种语法是什么意思?是记录器功能的存储、下一步、操作参数吗?比较下面的代码有什么不同:

const logger = (store, next, action) => {}

【问题讨论】:

  • 您提供的链接完美地解释了该功能的演变。它甚至告诉你柯里化函数可以用多个箭头函数很好地表达。抱歉,这是 rtfm 的情况。

标签: javascript reactjs ecmascript-6 redux


【解决方案1】:

这是一种柯里化。一种非常简洁的柯里化形式。如果我们将语法从箭头函数更改为经典函数,它将采用以下(诚然令人困惑的)语法:

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

...对于这种希望不那么令人困惑的语法:

const logger = function (store) {
    return function (next) {
        return function (action) {
            // ...
        }
    }
}

这有助于澄清一点吗?

【讨论】:

  • 有道理。但是如何调用函数logger呢?
  • 我知道我可以调用这个函数如:logger(xxx)(xxx)(xxx)。这是正确的吗?
  • @赵毅你不叫。你定义它并把它交给中间件来调用。 Currying 让您可以编写一个通常需要多个参数的函数,而这种方式只需要给出一个参数。其他参数由函数定义。 (但是,是的,如果你真的愿意,你可以这样称呼它)
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 2016-04-02
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多