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.