链接箭头函数在redux中的含义是什么?

链接箭头函数在redux中的含义是什么?,redux,Redux,查看下面的示例,我看到了设置api中间件的过程: export default store => next => action => { const callAPI = action[CALL_API] if (typeof callAPI === 'undefined') { return next(action) } 这里到底发生了什么?我看到configureStore正在导入任何内容,并将其从redux传递给applyMiddleware,但这种语

查看下面的示例,我看到了设置api中间件的过程:

export default store => next => action => {
  const callAPI = action[CALL_API]
  if (typeof callAPI === 'undefined') {
    return next(action)
  }
这里到底发生了什么?我看到configureStore正在导入任何内容,并将其从redux传递给applyMiddleware,但这种语句在js中意味着什么

我假设它导出一个匿名函数,返回一个函数,返回一个函数?刚刚试过这个:

var a = b => c => d => {
    console.log('a:', a);
    console.log('b:', b);
    console.log('c:', c);
    console.log('d:', d);
};

a(5)(6)(7);

// outputs b: 5, c: 6, and d: 7

要清楚地理解这一点,首先需要了解redux中的中间件是如何工作的。所以首先要通过

现在,即使看完了文档,你仍然感到困惑,不要担心它有点复杂,试着再看一遍:)。读了2-3遍后,我完全理解了这一点

现在,您在问题中提到的是一种过时的ES6语法。如果您尝试将其转换为香草javascript,则会出现如下情况

function (store) {
  return function (next) {
    return function (action) {
      var callAPI = action[CALL_API];
      if (typeof callAPI === 'undefined') {
        return next(action);
      }
    };
  };
};
如果你看到的只是函数的链接

功能专门化 箭头函数表示法简化了JavaScript

在这里,这只是一种方法,允许在不同的时间将参数绑定到函数,方法是使用而不是

当您在商店创建期间调用时,Redux将使用应用到的当前商店专门化您的中间件

然后它成为一个新的专用函数,只接受两个参数:

next=>action

其中
next
是将在操作中调用的下一个中间件。(就像在Express中一样,它推广了这个概念,用于请求处理)

时间线 这里重要的是,所有这些函数专门化都是在不同的时间完成的

  • 存储
    可以在创建存储期间绑定
  • next
    可以在知道绑定到的存储之后进行绑定,也可以在绑定期间进行绑定,但可以在以后进行更新
  • 操作
    只有在您有效地分派操作时才知道,该操作可以随时发生
专用中间件(已绑定到存储,并且已经知道下一个中间件功能的中间件)将是可重用的,并为每个新的调度操作调用

函数式编程 这些概念(咖喱和部分应用)来自世界各地

Redux在很大程度上依赖于这个范例,Redux中最重要的事情是(尤其是突变)的侧翼

直接捕获函数的上下文或通过
require
使用全局存储是一种副作用,因为函数在声明后将直接绑定到此存储

相反,Redux使用Currying来允许排序,它产生了一个无状态函数,可以在运行时重用和专门化


这样,您的中间件就可以到应用商店。

我不明白为什么这样做而不是
(应用商店,下一步,操作)=>{}
。。。啊,我想我现在明白了。。。Redux必须为存储调用顶级函数(称为fStore),以便返回的函数现在将存储范围限定到它。然后,该函数返回一个函数(fNext),该函数接受一个派系并返回它自己的派系,该派系将链接到传递的派系…@JasonGoemaat是的,区别是
(存储,下一步,操作)=>。
是一个单独的函数,您可以调用它,就像
x(存储,下一步,操作)
while
store=>next=>action
有一个不同的API,您可以调用它,比如
x(store)(next)(action)
,它看起来可能没有太大的不同,但这意味着您可以执行类似
a=x(store)的操作;b=剂量测定法(y)/*假设剂量测量通过y*/c=b(动作)
的“下一步”。如果您进行复杂的异步处理,它基本上是有用的