Рефакторинг функций для использования карри - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть три функции, которые я хотел бы реорганизовать с помощью карри, но я изо всех сил пытаюсь разобраться с функциями, которые возвращают функции. Я пытаюсь разбить и спроектировать функции карри в качестве отправной точки.

Я нашел эту среднюю статью , которая дает очень простой дизайн.

function discount(discount) {
    return (price) => {
        return price * discount;
    }
}

const tenPercentDiscount = discount(0.1);

tenPercentDiscount(500);

В на высоком уровне мои функции вызываются так:

getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
  .then((breed) => setConfigData(breed, config))
  .catch(() => false);
  • , если: debugToggle - он передает его mapCatValueToKey, чтобы получить породу кошки
  • else: делает сетевой запрос, передает массив от catBreeds до getPriorityBreed
  • устанавливает некоторые данные с возвращенными breed и config в области действия
getPriorityBreed(prioritisedBreeds, catBreeds, catDefintions)
  • вызывает mapCatValueToKey для отображения на catBreeds и создания нового массива с петлями catDefintions
  • по двум спискам - prioritisedBreeds и mappedCats сверху, чтобы вернуть приоритет breed
mapCatValueToKey(breed, catDefintions)
  • функция отображения для сопоставления породы (значения) с объектом определения кошки

Вот как вызывается getCatHelper :


function useCatHook(
  config: Config,
  catDefintions: any = CAT_DEFS,
  getCat: (
      prioritisedBreeds,
      catDefintions,
      debugToggle,
  ) = getCatHelper,
  debugToggle,
): any {
  const [data, setData] = useState(undefined);
  const prioritisedBreeds = Object.keys(config);

  // ...

  getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
      .then(breed => setData(breed))
      .catch(() => false);

  // ...
}

Мои вопросы:

  1. Как мне сконструировать это?
  2. Должен ли я заботиться о внутренних органах или просто спроектировать функцию и т. Функция, которую он возвращает?
  3. При рефакторинге, должен ли я сначала работать с внешней или внутренней функцией?

Буду признателен за любую помощь:)

1 Ответ

0 голосов
/ 23 апреля 2020

Я хотел, чтобы крюк не знал о CAT_DEFS и передавал его прямо getCatHelper.

. Я сделал эту работу:

export function getCatHelper {
    return (
        prioritisedBreeds,
        catDefintions,
        debugToggle,
        getDataLayer = getDataFromRequest
    ) {

    // ...

    };
}
function useCatHook(
  config,
  getCat (
      prioritisedBreeds,
      catDefintions,
      debugToggle
  ) = getCatHelper(CAT_DEFS),
  debugToggle
) {

  // ...

}
...