2017-04-16 87 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

相關問題