Какие плюсы и минусы 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-обёртка и дисциплина в большой команде.