foundation

Observables

Mark state as observable so reads can be tracked and dependent views can update automatically.

Observables are reactive properties. `makeAutoObservable` marks fields, getters, and methods on a class or object so reads register dependencies and writes trigger updates.

					import { makeAutoObservable } from 'mobx';

class TodoStore {
  items = [];
  constructor() {
    makeAutoObservable(this);
  }
  get openCount() {
    return this.items.filter((t) => !t.done).length;
  }
}
				

Arrays and maps are deeply observable. Components wrapped in `observer` re-render only when observables they read during render change.

The trade-off is automatic tracking versus opaque dependency graphs and harder time-travel than event logs.

On interviews: what happens if you read state outside `observer` or without tracking.

Common pitfalls: spreading observables into plain objects (losing reactivity), decorating non-plain structures incorrectly, and mixing untracked mutations.

Checklist:

  • makeAutoObservable / observable for models.
  • Read observables inside observer render.
  • Avoid replacing observable trees with clones blindly.
  • Use MobX devtools in development.