Что делать с вложением React HOC

Я очень ценю HOC в React. Это действительно круто:

export default withStyles(styleSheet)(MyComponent);

Но однажды я обнаружил, что в моем проекте есть несколько вложенных HOC для многих компонентов:

export default 
  withCheckingAccess(ACCESS)(
    withHoc1(
      withHoc2(
        withHoc3(
          connect(mapStateToProps, mapDispatchToProps)(withStyles(styleSheet)(MyComponent))
        )
      )
    )
  )
);

Это действительно выглядит некрасиво, поэтому мне интересно, что является лучшим методом или, может быть, хорошей библиотекой NPM, чтобы справиться с этим. Например, чтобы преобразовать его в:

export default awesomeHocsDealer(
  [
    withCheckingAccess(ACCESS),
    withHoc1,
    withHoc2,
    withHoc3,
    withStyles(styleSheet)
  ],
  connect(mapStateToProps, mapDispatchToProps)(MyComponent),
);

Это было бы тривиально написать самому, не так ли? Что-то вроде const apply = (funcs, target) => funcs.reverse().reduce((result, func) => func(result), target);. Кроме того, connect(...) может так же легко быть в массиве с другими HOC.

jonrsharpe 09.11.2018 12:27

спасибо, конечно, если ничего другого, я сделаю это сам. Но я пришел сюда за советом, как это сделать лучше, потому что я действительно не думаю, что я первый, кто решил с этим справиться.

Sasha Kos 09.11.2018 12:32

Если вы хотите найти библиотеки, обратите внимание, что это называется функциональная композиция и широко используется в функциональном программировании. Похоже, Redux предоставляет вам реализацию, например: redux.js.org/api/compose.

jonrsharpe 09.11.2018 12:32

спасибо я покопаюсь сочиняю

Sasha Kos 09.11.2018 12:39

@jonrsharpe, вот и все. redux compose, это функция, о которой я спрашивал. Итак, теперь я могу заняться export default compose(withHoc1, withHoc2, connect)(MyComponent). Спасибо! Не могли бы вы написать это как ответ ...? Отмечу как правильное

Sasha Kos 09.11.2018 13:00

Обратите внимание, что новое предложение React Hooks решает именно эту проблему! Но это всего лишь экспериментальное предложение. Я также слышал о плагинах ReactDevTools, очищающих HOC в chrome devTools.

3Dos 09.11.2018 13:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
6
196
0

Другие вопросы по теме