PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Какая фича JavaScript используется под капотом у MobX?

Основы языка

Под капотом у MobX используется Proxy (в MobX 5+) — прокси-объекты перехватывают чтение и запись свойств для автоматического отслеживания зависимостей и реактивности.

Главная фича: Proxy

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

  • Отслеживать чтение — знать, какие свойства использует компонент/computed (сбор зависимостей).
  • Перехватывать запись — при изменении свойства запускать реакции (перерисовку, пересчёт computed).
const proxy = new Proxy(target, {
  get(obj, prop) {
    trackDependency(obj, prop); // MobX запоминает, что prop прочитан
    return obj[prop];
  },
  set(obj, prop, value) {
    obj[prop] = value;
    triggerReactions(obj, prop); // MobX запускает зависимые реакции
    return true;
  },
});

Как это даёт реактивность

  1. Компонент читает store.count → Proxy фиксирует зависимость.
  2. Код меняет store.count → Proxy перехватывает запись → уведомляет зависимые реакции.
  3. Компонент-observer перерисовывается автоматически.

До Proxy (MobX 4)

Использовались геттеры/сеттеры (Object.defineProperty), но они не отслеживали динамически добавленные свойства и элементы массивов. Proxy сняли эти ограничения.

Другие используемые фичи

  • Замыкания (хранение состояния реакций).
  • Геттеры (для computed-значений).

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

Под капотом MobX (5+) использует Proxy — перехватывает чтение свойств (сбор зависимостей: кто что использует) и запись (запуск реакций при изменении). Это даёт автоматическое отслеживание зависимостей и реактивность (observer-компоненты обновляются сами). До MobX 5 — Object.defineProperty (геттеры/сеттеры) с ограничениями, которые Proxy сняли.

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