Какая фича 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;
},
});Как это даёт реактивность
- Компонент читает
store.count→ Proxy фиксирует зависимость. - Код меняет
store.count→ Proxy перехватывает запись → уведомляет зависимые реакции. - Компонент-observer перерисовывается автоматически.
До Proxy (MobX 4)
Использовались геттеры/сеттеры (Object.defineProperty), но они не отслеживали динамически добавленные свойства и элементы массивов. Proxy сняли эти ограничения.
Другие используемые фичи
- Замыкания (хранение состояния реакций).
- Геттеры (для computed-значений).
Коротко для собеседования
Под капотом MobX (5+) использует Proxy — перехватывает чтение свойств (сбор зависимостей: кто что использует) и запись (запуск реакций при изменении). Это даёт автоматическое отслеживание зависимостей и реактивность (observer-компоненты обновляются сами). До MobX 5 — Object.defineProperty (геттеры/сеттеры) с ограничениями, которые Proxy сняли.