本文共 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 组件的时候详细介绍