Что такое MobX

Ответ

MobX — это библиотека для управления состоянием в приложениях, основанная на реактивном программировании. Она автоматически отслеживает изменения данных и обновляет компоненты, которые их используют.

Ключевые концепции:

  1. Observable — помечает данные, за изменениями которых нужно следить.
  2. Action — функции, изменяющие состояние.
  3. Computed — производные значения, которые пересчитываются автоматически при изменении зависимостей.
  4. Reaction (например, autorun) — побочные эффекты, выполняемые при изменении состояния.

Пример:

import { observable, action, computed, makeAutoObservable } from 'mobx';

class CounterStore {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment = () => this.count++;
  decrement = () => this.count--;

  get doubleCount() {
    return this.count * 2;
  }
}

const store = new CounterStore();

Плюсы:

  • Минимальный boilerplate
  • Высокая производительность
  • Простота интеграции с React (через mobx-react-lite)

Ответ 18+ 🔞

Слушай, ну вот есть такая штука — MobX. Библиотека, понимаешь, для управления состоянием в приложениях. Основана на реактивном программировании, если тебе это о чём-то говорит. А суть её, блядь, в том, что она сама, как хитрая жопа, отслеживает, где что поменялось, и обновляет только те компоненты, которым эти данные реально нужны. Не то что некоторые другие, которые всю хуйню перерисовывают, будто у них овердохуища ресурсов.

Основные киты, на которых всё держится, блядь:

  1. Observable — это, грубо говоря, пометка для данных. Вешаешь на переменную — и всё, MobX теперь за ней следит, как кот сука собака. Изменилась — тревога, все на выход!
  2. Action — ну это просто функции, которые меняют состояние. Но, внимание, ёпта! Менять observable-данные нужно ТОЛЬКО внутри action'ов. Это как правило хорошего тона, чтобы не получилось пиздопроебибны, когда всё меняется откуда ни попадя.
  3. Computed — производные значения, геттеры, короче. Умная хуйня, которая сама пересчитается, когда поменяются те observable, от которых она зависит. Сидишь себе, пьешь кофе, а она там в фоне всё делает. Красота!
  4. Reaction (ну, типа autorun) — это для побочных эффектов. Хочешь что-то сделать (в консоль вывести, запрос отправить) КАК ТОЛЬКО данные поменялись? Вот тебе реакция, получай.

Смотри, как это выглядит в коде, на примере счётчика, чтоб совсем понятно было:

import { observable, action, computed, makeAutoObservable } from 'mobx';

class CounterStore {
  count = 0; // Вот наша observable-переменная. За ней следят.

  constructor() {
    makeAutoObservable(this); // Эта волшебная хуйня сама всё разметит: что observable, что action, что computed.
  }

  increment = () => this.count++; // Action! Меняем состояние.
  decrement = () => this.count--; // Тоже action!

  get doubleCount() { // Computed значение! Зависит от this.count.
    return this.count * 2;
  }
}

const store = new CounterStore();

И всё, магазин готов. Вызываешь store.increment()count меняется, и везде, где используется count или doubleCount, всё мгновенно обновляется. Волшебство, ёпта!

А теперь, почему это, блядь, иногда охуенно:

  • Минимальный boilerplate. Не нужно городить тонны кода, как в некоторых других местах. makeAutoObservable — и поехали. Чих-пых тебя в сраку от лишней писанины.
  • Производительность на высоте. Обновляет только то, что надо, а не всю вселенную. Умная система, не то что некоторые мартышлюшки.
  • С React интегрируется проще пареной репы. Есть библиотечка mobx-react-lite, взял, обернул компонент — и он уже реагирует на изменения магазина. Никаких лишних танцев с бубном.

В общем, если надоело вручную всё контролировать и хочется, чтобы состояние само за собой следило — MobX это твой выбор, чувак. Просто даёт делать дело, а не ебёшься с инфраструктурой.