请解释redux中的compose函数如何工作

时间:2017-04-16 01:07:42

标签: javascript redux function-composition

Redux中的compose function在很大程度上非常简单,我理解如何使用它。

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部分是什么?我理解这些是休息参数,但它评估的是什么?它来自哪里?

1 个答案:

答案 0 :(得分:0)

撰写只是允许你写

compose(func1, func2, func3, func4)

而不是

func1(func2(func3(func4))))

如果是

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

.reduce是数组的函数,你可以阅读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