curry
什么是curry?
- curry就是把多个参数的函数简化为一个参数的函数
curry用途
//原始代码
add = (x, y) => x + y;
//curried后代码
curriedAdd = (x) => {
return (y) => {
return x + y;
}
}
// 优化后的代码
curriedAdd = (x) => (y) => {
return x + y;
}
// 再优化后的代码
curriedAdd = (x) => (y) => x + y;
再复习下reduce
Array.reduce(funs,x)
- 归并操作,总共两个参数,第一个是函数,
- 可以理解为累加器,遍历数组累加回传的返回值,第二个是初始数值。如果没有提供初始值,则将使用数组中的第一个元素。
- 注意: reduce() 对于空数组是不会执行回调函数的。
compose(HOC,HOC)(component)
官方解释:实现方法的调用串联
普通组件 会传入 compose 参数中最右边高阶组件里面,return 出来之后再传入 依次的高阶组件里面执行(套娃)
function compose(...funcs) {
if (funcs.length === 0) {
return function (arg) {
return arg;
};
}
if (funcs.length === 1) {
return funcs[0];
}
return funcs.reduce((a, b) => {
return (...args) => {
return a(b(...args)))
}
}
}
优点:
- 更方便的代码管理
- 可以复用组件 利于单元测试
- 拆分逻辑
应用场景
- 逻辑复杂的高阶函数嵌套,可以拆分高阶函数的功能,使逻辑更加清晰。