mobx 原理解析
初始化:首先就是 mobx 在初始化的时候,是如何处理 observable 可观察属性的。 依赖收集:第二点就是通过 mobx-react 中的 observer ,如何收集依赖项,与 observable 建立起关系的。 派发更新:最后就是当改变可观察属性的值的时候,如何更新对应组件的。
依赖收集和依赖更新
function autorun(
view: (r: IReactionPublic) => any,
opts: IAutorunOptions = EMPTY_OBJECT
): IReactionDisposer {
const name: string = (opts && opts.name) || (view as any).name || "Autorun@" + getNextId()
const runSync = !opts.scheduler && !opts.delay
let reaction: Reaction
// 只看同步的autorun,异步是根据传入的delay setTimeout
if (runSync) {
// normal autorun
reaction = new Reaction(
name,
// reaction的onInvalidate, 用track调用reactionRunner, 也就是view(reaction), (重新)收集依赖
function(this: Reaction) {
this.track(reactionRunner)
},
opts.onError,
opts.requiresObservable
)
} else {
// ... 处理异步
}
function reactionRunner() {
view(reaction)
}
// 将 reaction 放进全局 globalState.pendingReactions 队列,里面会执行runReactions
reaction.schedule()
// 返回取消订阅
return reaction.getDisposer()
}
runReactions, runReactions 是依赖收集启动方法
runReactionsHelper
provider 源码分析
最后更新于
这有帮助吗?