Что такое Flux и Redux как архитектурный паттерн с однонаправленным потоком данных?
Архитектурные паттерны
Flux — архитектура с однонаправленным потоком Action → Dispatcher → Store → View, где View меняет состояние только через новый Action. Redux упростил её до одного стора и чистых редьюсеров `(state, action) => newState`.
Зачем
- Facebook предложил Flux в 2014 году: двусторонние связи моделей и представлений в MVC давали каскады обновлений, и было неясно, кто изменил состояние (известный пример — счётчик непрочитанных сообщений).
- Однонаправленный поток даёт одну точку изменений: любое обновление — сериализуемый action, который можно залогировать и воспроизвести.
Три принципа Redux
- Единый источник истины — одно дерево состояния.
- Состояние только для чтения, меняется лишь через
dispatch(action). - Изменения описываются чистыми функциями-редьюсерами.
Паттерны внутри
- Action — Command,
subscribe— Observer, middleware — Chain of Responsibility. - Редьюсер — свёртка событий, как в Event Sourcing.
Плюсы и цена
- Time-travel debugging, воспроизведение бага по логу действий, простые тесты редьюсеров.
- Бойлерплейт — закрыт Redux Toolkit (
createSliceс Immer). - Побочные эффекты вынесены в middleware: thunk, saga, listener.
- Лишние перерисовки при неудачных селекторах — лечатся мемоизацией через
reselect. - Ошибка — хранить серверный кэш в сторе вручную вместо RTK Query.
Коротко для собеседования
Во Flux и Redux состояние меняется только через action, проходящий по одному пути, поэтому любое изменение можно залогировать и воспроизвести. Redux свёл архитектуру к одному стору и чистым редьюсерам; сегодня его пишут через Redux Toolkit, а серверные данные держат в RTK Query.