本文共 1476 字,大约阅读时间需要 4 分钟。
文章的代码和大部分描述转载自:。感谢大佬总结分析的vue源码。这里做一个笔记学习(二次总结)
相关代码:
callHook(vm, "beforeCreate")initInjections(vm) // resolve injections before data/propsinitState(vm)initProvide(vm) // resolve provide after data/propscallHook(vm, "created")
initState:
不能获取到 props,也不能调用 methods的函数。也不能访问 DOM 因为并没有渲染 DOMprops,data,methods,Dom等要等到created相关代码:
(略)beforeMount 开始渲染虚拟 domnew Watcher 用来监听数据更新的相关代码:
export function mountComponent(vm: Component, el: ?Element, hydrating?: boolean): Component { // ... // we set this to vm._watcher inside the watcher's constructor // since the watcher's initial patch may call $forceUpdate (e.g. inside child // component's mounted hook), which relies on vm._watcher being already defined new Watcher( vm, updateComponent, noop, { before() { if (vm._isMounted) { callHook(vm, "beforeUpdate") } } }, true /* isRenderWatcher */ ) // ...} beforeUpdate 的执行时机是在渲染 Watcher 的 before 函数中必须在组件挂载后才会执行这个方法【重点】watch 的挂载是在 beforeMounted 的时候,而实际可以监听则是在 mounted 之后
相关代码:
(略)parent 的 $children 中删掉自身,删除 watcher先子后父,和 mounted 过程一样eep-alive 组件的时候详细介绍