Личные мысли после решения этой дилеммы на работе. TL; DR: проголосуйте за Redux.

Отношение к Redux у коллег-разработчиков React сложное. Хотя они знают это и часто ценят его полезность, они, как правило, не используют его. По ряду причин. Это сложно. Это внешняя библиотека. Имеет грубые узоры. Этим часто злоупотребляют. Это (будем честными) слишком условно.

Избегать Redux стало проблемой ремесла и доказательством архитектурного мастерства. Презентации, завершавшиеся словами «и нам вообще не нужен Redux», гарантировали громкие аплодисменты. Ага, я тоже хлопала ...

Рано или поздно все эти умные решения должны были столкнуться с реальной жизнью и столкнуться с творчеством владельцев проекта. Вот тут-то и появляется вторая изюминка - «Хорошо, давайте перейдем к Redux». Может быть, не за аплодисментами, а за не такими тихими смехом и облегчением. Даже от того, кому поручено это реализовать.

Я достаточно часто участвовал в этом ритуале, чтобы заранее стать умным. Я запрашиваю хранилище Redux до того, как остальная часть команды признает, что это необходимо. Установить его до того, как сложность уже написанного кода станет больше, чем эти уродливые верхние змеи Redux.

Жить стало немного сноснее. Но вдруг в React 16.3 появился новый Context API, и вот он снова ... «теперь нам вообще не нужен Redux».

«О Цезарь! Эти вещи бесполезны »

  • «Redux - это контейнер с предсказуемым состоянием для приложений JavaScript».
  • «Контекст позволяет передавать данные через дерево компонентов без необходимости передавать свойства вручную на каждом уровне»..

Эти определения взяты из документации. Кажется, они четко определяют свою цель. Redux предназначен для управления состоянием приложения, Context - для передачи реквизитов. На первый взгляд конфликта нет. Если буквально спросить, что выбрать, Контекст или Redux - ответ - RTFM. Но все мы знаем, что настоящий вопрос скрыт в контексте (🙃). Он старше React 16.3 - Нужен ли моему приложению Redux?

Многие проекты, в которых я работал, не использовали Redux. Это были те, где я даже не думал об использовании глобального магазина еще на стадии разработки концепции. Где границы контейнеров данных были четкими и очевидными. Где их обработка и вычисления могли бы уместиться в каких-то простых методах и не переполнять код компонента. Например, это были сборники статей с правилом один маршрут - один выбор. В других случаях это была панель управления с разделами для отделов, не имеющих ничего общего.

Самое сложное условие - это уверенность в том, что это не изменится. Потому что в Agile все может измениться. Популярность этого подхода настолько бесспорна, что часто люди работают с его парадигмами, не называя его так.

Итак, возникает некий глобальный статус - пользовательские предпочтения и данные, которые, как оказалось, у этих отделов общие. Первое значимое «Redux Alert» мигало. Когда это предупреждение появляется позже циклически, все чаще и чаще, это приводит к пункту, упомянутому во введении - «Хорошо, давайте переключимся на Redux».

«Мы стоим на плечах гигантов»

Идеальная компонентная конструкция состоит из независимых блоков. Блоки управляются сверху через реквизиты, которые можно повторно использовать, удалять или изменять, не затрагивая остальную структуру.

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

Когда я устанавливаю избегание глобального состояния в качестве своей архитектурной цели, я игнорирую Redux Alerts, но сохраняю код гибким, DRY, KISS и SLAP. Это приводит меня к замечательным нестандартным решениям и выкройкам. Они, несомненно, были очень ценным вкладом в наследие мировой технической мысли, но сделали мой проект таким особенным ребенком, что только мне он может понравиться.

Изобретать колесо - это весело, особенно если вы знаете оригинальное колесо. Но у всех этих механизмов уже есть шаблоны, которые сразу получит каждый новый парень с «React / Redux» в резюме. Не говоря уже об инструментах отладки и всей экосистеме, выросшей вокруг Redux за эти годы. (Кстати, это также может быть аргументом для обсуждения «Redux против других менеджеров состояний»).

Я начал рассматривать переход на Redux не как неудачу или сдачу, а как способ справиться с дилеммой названия. Государственный менеджер здесь только для того, чтобы помочь в управлении государством в глобальном масштабе. Начните проект без Redux, если чувствуете, что вам не нужна эта помощь. Вы всегда можете реализовать это позже.