State Managers
1. Flux
Flux — это архитектурный подход (или паттерн), который используется для управления состоянием в приложениях React.js. Его создала команда Facebook как альтернативу более хаотичным способам управления состоянием и взаимосвязи компонентов. Flux помогает упрощать логику приложения, разделяя данные и управление ими от пользовательского интерфейса.
Основные концепции Flux
Flux основывается на однонаправленном потоке данных, что является ключевым преимуществом по сравнению с двухсторонним связыванием данных (two-way data binding). Основные элементы архитектуры Flux:
Диспетчер (Dispatcher):
Центральный хаб, через который проходят все действия (actions) приложения.
Диспетчер отвечает за распространение действий к зарегистрированным хранилищам (Stores).
Действия (Actions):
Описывают события, которые происходят в приложении, например, "добавить элемент", "удалить элемент".
Представлены объектами с обязательным свойством
type
, которое указывает, что именно произошло. Дополнительно могут включать данные, связанные с этим событием.
Хранилища (Stores):
Это объекты, которые хранят состояние приложения и логику для его изменения.
Хранилища подписаны на действия, передаваемые через диспетчер, и обновляют своё состояние в зависимости от типа действия.
В отличие от компонентов React, хранилища не имеют прямой связи с UI.
Представления (Views):
Это компоненты React, которые отображают данные из хранилищ.
Компоненты получают обновления через подписку на хранилища и реагируют на изменения, перерисовываясь.
Как работает Flux (однонаправленный поток данных):
Пользователь выполняет действие, например, нажимает кнопку.
Это инициирует action, который отправляется в диспетчер.
Диспетчер передаёт action в соответствующие хранилища.
Хранилища обновляют своё состояние и уведомляют представления (views) об изменениях.
Представления перерисовываются с обновлёнными данными.
Пример работы Flux:
Flux и Redux
Flux стал основой для Redux, который является более популярной библиотекой управления состоянием в приложениях React. Redux упрощает и формализует многие аспекты Flux:
В Redux вместо множества хранилищ используется одно глобальное хранилище.
Redux вводит концепции редьюсеров (reducers) для управления изменением состояния.
Redux более модульный и имеет богатую экосистему.
Last updated