【发布时间】:2019-05-24 06:34:14
【问题描述】:
我正在查看 @acdlite 重构库中的 compose 函数,以组合高阶组件的边界条件,这就是 compose 函数的样子
const compose = (...funcs) => funcs.reduce((a, b) => (...args) => a(b(...args)), arg => arg);
但是,我尝试了Eric-Elliott 的单行方法来编写,从https://medium.com/javascript-scene/reduce-composing-software-fe22f0c39a1d,特别是这段代码。
const compose = (...fns) => x => fns.reduceRight((v, f) => f(v), x);
我尝试在我的反应组件中使用这两种变体,像这样,
const ListWithConditionalRendering = compose(
withLoadingIndicator,
withDataNull,
withListEmpty
)(Users);
而且它们似乎都可以正常工作。我无法理解上述功能的工作方式是否有任何不同,如果有,它们是什么。
【问题讨论】:
-
一个使用Array的
reduce函数,另一个使用reduceRight... -
第一个返回一个预先组合的函数,第二个返回一个作用域函数,当你调用它时应用组合。
-
@EmileBergeron :我的错,我可能不够清楚。是的,一个使用reduce,另一个使用reduceRight,但它们最后都给出了相同的结果。我理解使用reduceRight 的那个,但不能真正理解使用reduce 的那个,比如流程是如何工作的。你能解释一下吗?
-
@PatrickRoberts:有道理,谢谢。是否有任何负面情况或边缘情况,您可以想到其中一种会比另一种更好。另外,如果您可以详细说明将组合用作答案的预组合和作用域函数,我很乐意接受。
标签: javascript reactjs functional-programming reduce higher-order-functions