Кладбище паттернов в React.
Ты читал статьи про HOC, Render Props, Compound Components. Возможно, даже использовал.
Я тоже. И теперь жалею.
Потому что 80% этих паттернов умерли ещё в 2019. Просто не все об этом знают. 🚀
Краткая история одного обмана
Раньше React был бедным. 💥
Не было хуков. Не было контекста нормального. Жизненные циклы - только в классах.
Поэтому умные дяди придумывали обходные пути. HOC, чтобы переиспользовать логику. Render Props, чтобы прокидывать данные. Подобные танцы с бубном.
Потом вышли хуки. 🧼
И всё это стало не нужно.
Но статьи остались. И люди продолжают учить паттерны, которые решают несуществующие проблемы.
Первый труп: HOC (Higher-Order Component) 🦸♂️
Классика. Функция, которая берёт компонент и возвращает новый, обёрнутый.
Пример:
\\ withAuth(UserPage) withTheme(Button) withLogger(Input) \\
Выглядит умно и уместно. По факту - чёрная магия.
Ты смотришь в компонент и не видишь, откуда у него props.theme или props.user. Где-то там, в обёртке. В трёх уровнях вложенности.
Хуки решили это одной строкой:
\\ const { theme } = useTheme() const { user } = useAuth() \\
Прозрачно. Предсказуемо. Без ада обёрток.
Забудь про HOC. Используй хуки. 🎛️
—
Второй труп: Render Props 💀
Паттерн, где ты передаёшь функцию-рендер в пропс. Компонент вызывает её с данными.
Пример:
\\
{({ data, loading }) => ( loading ? : )}
\\
Гениально. Только теперь вместо пропсов у тебя колбэк. Вложенность растёт. Читаемость падает.
Та же задача решается через useEffect и useState. Или через react-query одной строчкой.
Render Props - это прошлый век. 📈
Третий жмур: HOC + Render Props вместе 🕸️
Был такой гибрид. Компонент-монстр, который принимал и обёртки, и рендер-функции.
Пример из реального проекта:
\\ withRouter( withTheme( withAuth( ({ data }) => ( {value => {value}} ) ) ) ) \\
Это не код. Это матрёшка. 🧨
Ты добавляешь одну фичу. Ломается три.
Хуки похоронили этот ад окончательно и бесповоротно.
Что осталось живого 🏗️
Не всё - мусор. Три паттерна до сих пор работают.
Первый. Compound Components. 🧩
Компоненты, которые работают в связке, но ты можешь менять их структуру.
Пример - Select с внутренними Select.Option. Или Tabs с Tab.Panel.
Хуки не умеют этого. Только композиция компонентов. Живой паттерн.
Второй. Провайдеры с контекстом. 🌍
Обёртка, которая даёт данные всем детям.
Раньше был HOC. Теперь - createContext и useContext. Проще, чище, без магии.
Третий. Хуки как замена всему. 🔌
Любую логику ты выносишь в кастомный хук.
useAuth, useTheme, useMediaQuery, useLocalStorage. Всё это просто хуки.
Никаких обёрток. Никаких HOC. Никаких Render Props.
Как не попасть в ловушку
Правило одно и работает всегда и безотказно.
Спроси себя: «Решает ли этот паттерн проблему, которую не решают хуки?»
Если ответ «нет» или «не уверен» - используй хуки.
Гуглил решение? Нашёл статью с HOC или Render Props? Закрой вкладку и забудь. Ищи альтернативу на хуках. Она есть в 95% случаев.
Остальные 5% - либо очень старая кодовая база, либо архитектурный изврат.
Итог
Хаки - это легаси, которое не успело состариться. 😂
Их придумали, потому что React был недоделан. Уже доделали. Пора забыть.
Пиши на хуках. Композируй через кастомные хуки. Используй Compound Components для UI-библиотек.
Всё остальное - лишний код, который через год будет бесить тебя же. 🔥
Не усложняй. React и так достаточно сложный. 🎯
· 28.05
Приятно почитать. Но если все это забудется, то как же душнилы будут тошнить на собесах спрашивая о том, что надо было забыть еще пару лет назад как страшный сон?) У них и так уже отняли классовые компоненты и весь ужас что был с ними связан😂
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 28.05
Забывать не надо ) надо уметь применять, надеюсь душнилы подтянутся в этом плане
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён