intermediate

Computed values

Вычисляйте кэшированные значения из observables без ручного хранения дубликатов состояния.

Computed values кэшируют производные данные и пересчитываются только при смене отслеживаемых зависимостей — ответ MobX на мемоизированные селекторы. Определяйте как геттеры на observable-моделях или через `computed()`.

					class Cart {
  items = [];
  constructor() {
    makeAutoObservable(this);
  }
  get total() {
    return this.items.reduce((sum, i) => sum + i.price * i.qty, 0);
  }
}
				

Computed должны оставаться чистыми (без побочных эффектов). Ленивы: если `total` никто не читает, работа не выполняется.

Компромисс: кэшированные производные без ручного дублирования против пересчёта при широких зависимостях.

На интервью: computed против поля `total`, обновляемого в каждом action.

Типовые ошибки: побочные эффекты в геттерах, циклические computed, тяжёлые computed на огромных observer-деревьях.

Чеклист:

  • Чистое вычисление в getters/computed.
  • Computed вместо ручной синхронизации полей.
  • Дешёвые computeds или разбиение данных.
  • Тестируйте computeds как функции от observables.