Бывают ли ситуации, когда вам не нужен Redux? Конечно, но так было всегда.

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

Redux: обратная реакция и чрезмерное использование

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

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

Новый контекстный API: замена Redux?

С выпуском React 16.3 была представлена ​​новая стабильная версия контекстного API. Контекст предназначен для передачи данных глубоко вложенным компонентам React, вариант использования, который часто приводился в качестве причины использования Redux. В результате появились заявления о том, что новый контекстный API заменит Redux.

Хотя новый контекстный API отлично подходит для передачи данных глубоко вложенным компонентам, он не предоставляет тех же возможностей, что и Redux. Контекст сам по себе не предлагает такие функции, как Redux DevTools, отслеживание состояния обновления, промежуточное ПО для централизованной логики приложения или другие мощные возможности, которые предоставляет Redux. Кроме того, контекст в первую очередь является механизмом предоставления значения поддереву компонентов и не управляет состоянием сам по себе.

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

GraphQL: замена Redux?

GraphQL и его популярный клиент Apollo привлекли значительное внимание в экосистеме React. В некоторых статьях утверждалось, что GraphQL может заменить Redux, особенно с возможностями управления состоянием на стороне клиента Apollo.

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

React’s Hooks API: конец Redux?

API-интерфейс React Hooks, представленный на ReactConf 2018, позволяет функциональным компонентам иметь состояние и выполнять побочные эффекты после обновления. Некоторые разработчики предположили, что useReducer(), useContext() и обновленный Context API устранят необходимость в Redux.

Это правда, что useReducer() позволяет обновлять состояние с помощью редьюсеров без хранилища Redux, а useContext() позволяет передавать значения через дерево React без сверления свойств. Однако Redux предлагает дополнительные функции, такие как отладка с перемещением во времени, промежуточное ПО и расширение Redux DevTools Extension, которые недоступны только с помощью хуков. Вполне допустимо использовать хуки и Redux вместе, используя преимущества обоих подходов.

Будущее Редукса

Как сопровождающий Redux, я могу с уверенностью сказать, что Redux никуда не денется. Базовая библиотека стабильна, широко используется, постоянно поддерживается и совершенствуется. Хотя в экосистеме React есть и другие варианты управления состоянием, Redux остается актуальным по нескольким причинам:

  1. Последовательные архитектурные шаблоны: Redux предоставляет четкие и последовательные шаблоны для управления состоянием в приложениях.
  2. Возможности отладки. Расширение DevTools для Redux обеспечивает мощную отладку и отладку с перемещением во времени.
  3. Промежуточное ПО: Экосистема промежуточного ПО Redux позволяет добавлять централизованную логику приложения, такую ​​как ведение журнала, вызовы API и многое другое.
  4. Дополнения и расширяемость: Redux имеет богатую экосистему дополнений и расширений, которые предоставляют дополнительные функции и интеграции.
  5. Кросс-платформенное и кросс-фреймворковое использование: Redux можно использовать с различными фреймворками, не ограничиваясь React.
  6. Производительность: в зависимости от настройки вашего приложения Redux может предложить лучшую производительность по сравнению с использованием только контекста.

Чтобы сделать работу с Redux еще проще, команда Redux представила Redux Toolkit, официальный пакет, который упрощает распространенные варианты использования Redux и продвигает лучшие практики. React-Redux также представил API-интерфейс хуков, который обеспечивает более простой и интуитивно понятный способ использования Redux в функциональных компонентах.

По состоянию на декабрь 2020 года команда Redux также выпустила экспериментальную библиотеку для выборки и кэширования данных под названием RTK Query, созданную для Redux Toolkit. Это дополнение еще раз демонстрирует стремление к улучшению экосистемы Redux.

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