Skip to content
目录

依赖追踪机制

MobX 在读取 observable 时记录「谁在用」;写入时通知依赖方(computed / reaction / observer 组件)更新。核心是 Derivation(派生)+ 全局 tracking 上下文


1. 流程(一句话)

text
autorun / render / computed.get
  → track(observable 读取)
  → observable 变更
  → propagate / 重新执行

2. 关键概念

概念作用
Observable可被追踪的数据
Derivationcomputed、reaction、observer 渲染
DependencySet当前 derivation 依赖哪些 observable
runId同一轮执行内去重依赖登记

3. 追踪发生时机

  • 访问 .、数组索引、Map.get 等 → 触发 reportObserved
  • Action 内默认不建立新依赖(事务边界,见 07)。
  • 未在 derivation 内读取 → 不追踪(纯脚本改 observable 不会触发 UI)。

4. 优化点

  • runId_:同一次执行不重复添加同一依赖边。
  • lowestObserverState_:传播时跳过已是最新状态的观察者(见 03)。

5. 调试

MobX 6 trace()spy、浏览器扩展查看依赖图;生产关闭。


6. 总结

MobX 性能来自精确依赖图,不是 Virtual DOM 全量 diff;误用(在 action 外散落赋值、巨大 autorun)会破坏这一优势。

MIT License.