Frontend
State Management #
Redux #
Middle+ or Senior #
Что такое Redux?
|
Redux — библиотека управления состоянием с единым store и явными событиями. Новое состояние вычисляется reducers из предыдущего состояния и action. Обычно используют Redux Toolkit, который уменьшает boilerplate и безопасно применяет immutable updates. |
Какие основные идеи Redux?
|
State хранится централизованно, изменения описываются actions, а reducers вычисляют следующий state предсказуемо. Однонаправленный поток облегчает tracing и replay. Side effects выносят за пределы reducers. |
Что такое store?
|
Store хранит текущее state tree, принимает actions через |
Что такое action?
|
Action — обычный объект, описывающий произошедшее событие, обычно с полем |
Что такое reducer?
|
Reducer — функция
|
Почему reducer должен быть чистой функцией?
|
Одинаковые входы должны давать одинаковый результат без внешних side effects. Это делает обновления тестируемыми, поддерживает replay и time-travel debugging. I/O выполняет middleware или отдельный orchestration layer. |
Что такое immutable update?
|
Это создание нового объекта для изменившейся ветки вместо мутации существующего state. Ссылочное сравнение позволяет быстро определить изменения. Redux Toolkit использует Immer, поэтому внутри reducer можно писать mutation-like syntax с immutable результатом. |
Что такое selector?
|
Selector читает или вычисляет данные из store. Memoized selector не пересчитывает результат, пока его входные ссылки не изменились. Сложную derivation logic лучше держать в selectors, а не компонентах. |
Что такое middleware?
|
Middleware перехватывает dispatch между caller и reducer. Оно используется для async flows, logging, analytics и обработки ошибок. Middleware не должно скрывать критичную бизнес-логику без наблюдаемых actions. |
Что такое side effects в Redux?
|
Это HTTP, storage, timers, navigation, случайность и любое взаимодействие вне чистого reducer. Их реализуют thunk, saga, observable middleware или listener middleware. Результат обычно возвращается в store новым action. |
Какие плюсы Redux?
|
Явный поток данных, хорошие DevTools, предсказуемые updates, testability и удобная диагностика сложных сценариев. Центральный event log полезен большим командам. Экосистема предлагает устойчивые patterns для normalized data. |
Какие минусы Redux?
|
Дополнительные actions, reducers, selectors и async conventions увеличивают объем кода и порог входа. Глобальный store легко перегрузить локальным state. Плохая granularity вызывает лишние updates и связанность features. |
Когда Redux оправдан?
|
Когда много удаленных компонентов используют общее сложное состояние, важны audit/debugging и несколько команд меняют одни domain entities. Он полезен для долгоживущих async workflows и normalized caches. Решение должно окупать инфраструктуру. |
Когда Redux будет лишним усложнением?
|
Для формы, раскрытия панели или данных одного feature часто достаточно component state или query cache. Если actions лишь дублируют простые setters, архитектура не дает пользы. Начинать лучше с colocated state. |
MobX #
Junior #
Что такое MobX?
|
MobX — реактивная библиотека, которая отслеживает чтения observable state и автоматически обновляет зависящие computations и views. Код часто выглядит как обычные объекты и методы. Связи формируются динамически во время выполнения. |
Что такое observable state?
|
Это состояние, чтения и изменения которого отслеживает MobX. Когда observable меняется, зависимые computed values и reactions инвалидируются. Изменения обычно группируют в actions. |
Что такое computed value?
|
Computed — производное значение из observables. MobX кеширует его и пересчитывает при изменении реально прочитанных dependencies. Computed должен быть чистым и не выполнять I/O. |
Что такое reaction?
|
Reaction запускает side effect при изменении наблюдаемого выражения. Его используют для persistence, analytics или интеграции с внешним API. Reaction нужно уничтожать, когда заканчивается lifetime владельца. |
Middle #
Какие плюсы MobX?
|
Меньше boilerplate, естественная объектная модель и точные updates по фактически прочитанным dependencies. Удобен для богатых domain models и сложных производных значений. Быстро внедряется в локальные features. |
Какие минусы MobX?
|
Динамический dependency graph и скрытая реактивность могут усложнить tracing. Легко создать side effects с неочевидным lifecycle или чрезмерно mutable shared model. Нужны соглашения о actions, ownership и disposal. |
Middle+ or Senior #
Чем MobX отличается от Redux?
|
Redux делает события и переходы состояния явными через actions/reducers. MobX больше опирается на observable graph и автоматические reactions, поэтому бывает лаконичнее. При неаккуратном дизайне поток изменений сложнее проследить. |
Когда MobX может быть удобнее Redux?
|
Когда важна лаконичная модель объектов, много computed dependencies и команда принимает runtime-реактивность. Redux удобнее, если нужен строгий event log и максимально явный flow. Выбор зависит от требований к debugging и культуре команды. |
Связь с Angular #
Этот раздел держит framework-agnostic теорию: Redux, MobX, store, actions, reducers, selectors, side effects и immutability. Angular-specific применение вынесено в Управление состоянием в Angular: signals, scoped services, RxJS store services, NgRx/NGXS/Akita и facade pattern.