Причины использования Redux:
Одна и та же часть состояния приложения должна быть сопоставлена с несколькими
контейнерные компоненты.
Хорошим примером этого является состояние сеанса. Когда приложение загружается в первый раз, часто необходимо поделиться информацией о пользователе с различными компонентами в заголовке и на каждой странице. Вероятно, эти компоненты не имеют прямой связи, поэтому Redux предоставляет удобный способ поделиться состоянием.
Глобальные сильные текстовые компоненты, к которым можно получить доступ из любого места.
Обычно существуют компоненты, которые работают в течение всего жизненного цикла приложения (для одностраничного приложения это происходит каждый раз при перезагрузке точки входа), которые выполняют такие функции, как показ уведомлений, снэк-баров, всплывающих подсказок, модалов, интерактивных учебных пособий и т. Д. В Redux вы можете создавать действия, которые отправляют команды этим компонентам, например, если код выполняет асинхронный запрос к бэкэнду, он может отправлять действие show snackbar в случае сбоя запроса. Без Redux вам потребовалась бы какая-то другая система событий или нужно было бы создавать экземпляр компонента «закусочная» каждый раз, когда он используется.
Слишком много реквизита проходит через несколько иерархий
компоненты.
Если компонент более высокого уровня снабжен дюжиной реквизитов и использует только два из них, а остальные передаются компоненту более низкого уровня, то подумайте о рефакторинге с Redux. Этот сценарий часто происходит с компонентами-оболочками, которые просто предоставляют стили макета, но не требуют большого количества данных или конфигурации. В этом случае более целесообразно подключать Redux непосредственно к компоненту более низкого уровня.
Управление состоянием с использованием setState приводит к вздутию компонента.
Это довольно субъективно, но компоненты, содержащие более нескольких сотен строк кода, начинают становиться все труднее рассуждать и поддерживать. Разделение управления состоянием на редуктор разбивает код и делает его более читабельным.
Состояние страницы кэширования.
Когда пользователь выполняет какие-то действия на странице, затем переходит на другую страницу и возвращается, обычно ожидается, что страница находится в том же состоянии. Некоторые из этих проблем можно решить, сохранив состояние страницы в бэкэнде и вызвав его при загрузке страницы. Но часто такие вещи, как входные значения поиска и расширенные / свернутые аккордеоны, просто излишни для хранения в бэкэнде. Поскольку редукторы обычно инициализируются и работают в течение всего сеанса, они могут кэшировать состояние страницы, поэтому все остается неизменным.