Ответ
MobX использует декораторы (декораторы свойств @observable, @computed, @action) и Proxy API (в современных версиях) для отслеживания изменений в данных.
Пример:
import { observable, computed, action } from "mobx";
class Store {
@observable count = 0;
@computed get doubleCount() {
return this.count * 2;
}
@action increment() {
this.count++;
}
}
Proxy позволяет MobX перехватывать обращения к свойствам и автоматически управлять реактивностью без декораторов (если используется makeObservable/makeAutoObservable).
Важно:
- В старых версиях MobX использовал
Object.defineProperty. - Современные версии полагаются на Proxy для лучшей производительности и поддержки динамических свойств.
Ответ 18+ 🔞
А, MobX, говоришь? Ну это ж, блядь, как в цирке с дрессированными данными! Сидит такой объект, а за ним, сука, невидимый клоун-надзиратель следит, чтоб никто не сходил с ума без спросу.
Смотри, как раньше-то было, в старые добрые времена. Пили они, блядь, из Object.defineProperty, как из старой фляги. Замудрённо, негибко, динамические свойства не ловили. Ну, в общем, как доить ёжика в рукавицах.
А щас, охуенно, перешли на Proxy API — это как поставить на каждый объект скрытую камеру с датчиком движения. Полез кто-то в свойство (this.count), вызвал метод — Proxy сразу сигнализирует: «Э, сабака, сука, тут движение!». И вся реактивность, блядь, просыпается, как от запаха жареного.
Ну и декораторы эти, @observable, @computed, @action — это такие, блядь, ярлычки-напоминалки. Вешаешь на свойство — и всем становится ясно: «Чувак, за мной следят, я реактивный!». Без них, конечно, тоже можно, через makeAutoObservable, но это как ехать на авто без руля — вроде едет, но непонятно, кто кем управляет.
Вот смотри на этот код, тут всё прозрачно, как слёзы ребёнка, которого заставили учить MobX:
import { observable, computed, action } from "mobx";
class Store {
@observable count = 0; // Следи за этой переменной, как ястреб! Изменится — всем пизда.
@computed get doubleCount() { // Это не просто геттер, это хитрая жопа!
return this.count * 2; // Само пересчитается, только count чихнет.
}
@action increment() { // Все изменения — только через турникет экшена!
this.count++; // Иначе MobX охуеет и ничего не заметит.
}
}
И главное, запомни:
Раньше следили в замочную скважину (Object.defineProperty), а сейчас — через спутниковый шпионаж (Proxy). Результат один, но щас, блядь, овердохуища возможностей и скорость — просто хуй с горы летит. Вот и вся магия, ебать мои старые костыли.