2017-10-16 116 views
0

要Redux的定义中间件,我们需要编写的功能,如级联:Redux中间件函数应该如此复杂吗?

const middleware = middlewareApi => next => action => { 
    //logic here 
} 

问题是这样的签名是否是:

  • 任何生活必需品实行/打开任何机会;
  • 的终极版的实现细节只是寓意/舒适为开发者操纵的(next) -argumented功能,如here

阵列莫非具有以下签名来替换(与相应的改动当然终极版的代码) :

const middleware = (middlewareApi, next) => action => { 
    //logic here 
} 

我意识到,结果并不完全等同于前者,但似乎没有这让的applyMiddleware情况下,任何的区别。这种语法不会让IMO感到困惑。

+0

当前的API比你提出的API更灵活:它给中间件作者3个生命期钩子(当中间件绑定到redux,当它被添加到MW管道时,以及何时发生redux操作时。更多的选项来定义中间件需要的任何本地状态的范围 – Brandon

+0

我称这种模式为廉价咖喱,它提供了最大的灵活性,以部分应用函数的传递为代价,其代价是需要几个额外的元素。 – ktilcu

回答

1

我们有一个新的"Design Decisions" FAQ页面可以解答这个问题。 (该文档尚未用新内容重新发布,因此我链接了Markdown文件。)

由于其他评论已经提到:currying是一种标准的函数式编程技术,在这种情况下,它有助于提供闭包中间件作者可以存储需要在中间件整个生命周期中可访问的值。

请参阅常见问题条目,以获取有关该主题的先前讨论的链接。

+0

谢谢,这就是我一直在寻找的东西。 – origaminal