PassFront
  1. PassFront
  2. База знаний
  3. Контекст и State managers

Какие плюсы и минусы MobX в React?

Контекст и State managers

MobX — стейт-менеджер на реактивных примитивах: состояние — наблюдаемые объекты (observable), компоненты автоматически подписываются на те поля, которые реально читают.

Как выглядит

class CartStore {
  items = [];

  constructor() { makeAutoObservable(this); }

  add(item) { this.items.push(item); } // мутация — это нормально в MobX

  get total() { // computed — кешируется
    return this.items.reduce((sum, i) => sum + i.price, 0);
  }
}

const Cart = observer(() => {
  return <span>{cartStore.total}</span>; // подписка на total автоматически
});

Плюсы

  • Минимум бойлерплейта: обычные классы и мутации вместо экшенов/редьюсеров/иммутабельных обновлений.
  • Точечные перерендеры из коробки: observer-компонент обновляется только если изменились поля, которые он читал, — селекторы и мемоизация почти не нужны.
  • computed-значения: производные данные кешируются и пересчитываются лениво.
  • Удобно ложится на ООП-доменную модель; хорош с классовой архитектурой и DI.

Минусы

  • Магия реактивности: неявные подписки сложнее отлаживать («почему перерендерилось?» / «почему НЕ перерендерилось?»); нужно понимать правила (деструктуризация ломает реактивность, чтение вне observer не отслеживается).
  • Меньшая предсказуемость: мутации из любого места против строгого однонаправленного потока Redux; в большой команде нужна дисциплина (actions, strict mode).
  • Слабее экосистема тулинга: девтулзы и трейсинг скромнее Redux DevTools (time travel нет).
  • Каждый компонент нужно оборачивать в observer; class-based стиль расходится с «функциональным» мейнстримом React.

Когда выбирать

Сложные интерактивные домены с богатой моделью (редакторы, дашборды с массой производных данных), команды, близкие к ООП. Для простого глобального состояния сегодня чаще берут Zustand; для строгой предсказуемости и больших команд — Redux Toolkit.

Коротко для собеседования

Плюсы MobX: минимум кода, автоматические точечные подписки (перерендер только у тех, кто читал изменённое поле), кешируемые computed. Минусы: неявная «магия» реактивности усложняет отладку, меньше предсказуемости и тулинга, чем у Redux, требуется observer-обёртка и дисциплина в большой команде.

Другие вопросы раздела