Пожалуйста, объясните, как работает функция компоновки в редуксе.

Функция compose в Redux по большей части очень проста. и я понимаю, как его использовать.

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 часть? Я понимаю, что это остальные параметры, но что они оценивают? Откуда это?


person Amit Erandole    schedule 16.04.2017    source источник
comment
... не является оператором. Вы можете прочитать об остаточных параметрах и < href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator" rel="nofollow noreferrer">распространение вызовов на MDN. что он оценивает Они оба являются синтаксическими конструкциями с разными значениями. Первый означает, что все аргументы собраны в массив, доступный через args. Второй означает передачу всех записей (итерации, на которую ссылается) args в качестве аргументов b.   -  person Felix Kling    schedule 16.04.2017
comment
здорово - хороший улов - буду читать это   -  person Amit Erandole    schedule 16.04.2017
comment
Возможный дубликат Понимание функций компоновки в redux   -  person therewillbecode    schedule 07.08.2018


Ответы (1)


Compose просто позволяет вам писать

compose(func1, func2, func3, func4)

вместо

func1(func2(func3(func4))))

В случае

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

.reduce — это функция массива, вы можете прочитать о Функция уменьшения массива

Он возвращается

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

и дает вам возможность передать некоторые параметры вложенным функциям.

например: Это позволяет вам написать что-то вроде этого:

 nestedFunc = compose(func1, func2, func3);

 nestedFunc({key: value})

что приведет к

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

Подробнее о функции составления

person Niraj    schedule 17.04.2017