advanced
Reactions
Запускайте побочные эффекты при изменении отслеживаемых observable-зависимостей, избегая скрытых циклов обратной связи.
Reactions запускают побочные эффекты при изменении отслеживаемых observables: `autorun`, `reaction`, `when`. Для логирования, синхронизации с localStorage, роутинга, императивных API — не для основного вычисления (там computed).
import { reaction } from 'mobx';
reaction(
() => store.filter,
(filter) => analytics.track('filter_changed', { filter }),
);
`reaction` разделяет функцию отслеживания и эффект, избегая случайных чтений в фазе эффекта. Остерегайтесь петель: эффект мутирует observable и снова запускает ту же reaction.
Компромисс: декларативные побочные эффекты против риска циклов, если reactions пишут обратно в отслеживаемое состояние.
На интервью: reaction vs useEffect в React; когда reactions заменяют цепочки effect.
Типовые ошибки: autorun мутирует свои зависимости, нет dispose при unmount, дублирование React effects и reactions без ясного владельца.
Чеклист:
- Reactions только для побочных эффектов.
- reaction вместо autorun, когда разделение data/effect помогает.
- Dispose при смерти store/компонента.
- Без петель: эффект не должен слепо переписывать триггеры.