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/компонента.
  • Без петель: эффект не должен слепо переписывать триггеры.