2017-04-16 29 views
0

Redux中的compose function大部分都非常简单,我也明白如何使用它。请解释REDX中的组合函数的工作原理

export default function compose(...funcs) { 
    if (funcs.length === 0) { 
    return arg => arg 
    } 

    if (funcs.length === 1) { 
    return funcs[0] 
    } 

    return funcs.reduce((a, b) => (...args) => a(b(...args))) 
} 

然而,最后一位的这一部分似乎真的不起眼的对我说:

funcs.reduce((a, b) => (...args) => a(b(...args))) 

什么是...args一部分?我明白这些是休息参数,但它评估的是什么?它来自哪里?

+2

['...'是不是运营商](http://stackoverflow.com/a/37152508/218196)。你可以阅读[休息参数](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters)和[“呼叫传播”](https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)。 *“它评估什么”*它们都是具有不同含义的句法结构。第一个意思是所有参数都是通过'args'访问的数组中收集的。第二种意思是将'args'的所有条目作为参数传递给'b'。 –

+0

真棒 - 好抓 - 将阅读此 –

回答

1

撰写只是让你来写,而不是

compose(func1, func2, func3, func4) 

func1(func2(func3(func4)))) 

funcs.reduce((a, b) => (...args) => a(b(...args))) 

。降低的情况下是阵列的功能,你可以阅读有关Array Reduce function

它返回

(...args) => a(b(...args); 

,并给你一个选项来传递一些参数给嵌套函数。

例如: 它允许你写的东西是这样的:

nestedFunc = compose(func1, func2, func3); 

nestedFunc({key: value}) 

这将导致

func1(func2(func3({key: value}))) 

Read more about compose function

相关问题