intermediate
Computed values
Derive cached values from observables without storing duplicate state manually.
Computed values cache derived data and recompute only when observed dependencies change — MobX's answer to memoized selectors. Define them as getters on observable models or with `computed()`.
class Cart {
items = [];
constructor() {
makeAutoObservable(this);
}
get total() {
return this.items.reduce((sum, i) => sum + i.price * i.qty, 0);
}
}
Computed values must stay pure (no side effects). They lazily evaluate: if nothing reads `total`, work is skipped.
The trade-off is cached derived values without manual duplication versus recomputation when dependencies are broad.
On interviews: computed vs storing `total` as a field updated in every action.
Common pitfalls: side effects inside getters, circular computed dependencies, and expensive computeds read by huge observer trees.
Checklist:
- Pure derivation in getters/computed.
- Prefer computed over manual sync fields.
- Keep computeds cheap or partition data.
- Test computeds as functions of observables.