有关insertedVnodeQueue的梳理
1,每个组件都有一个insertedVnodeQueue
在patch这个组件时,insertedVnodeQueue为[]
2,insertedVnodeQueue中放的是这个组件中具有data属性的vnode,其中的子组件是占位vnode
3,当这个组件patch完后,会遍历insertedVnodeQueue,执行vnode.data.hook.insert()函数,执行这个vnode的mounted钩子
……………………………………………………………………
注1:最后一个子组件在patch完后,它的insertedVnodeQueue还是[],因为这个组件里面全是原生html,insertedVnodeQueue中并没有收集到vnode。也就是说最后一个子组件patch完后,不会执行它的mounted。
而是要等到它的父组件patch完后,再执行最后一个子组件的mounted。因为最后一个子组件的父组件的insertedVnodeQueue里面有最后一个子组件的占位vnode
…………………………………………………………………………
注2:
new Vue()的mounted的执行地方:是在new Watcher()下面
注3:
是不是每个组件在patch完后,又都会执行new Watcher()下面这个语句:
if(vm.$vnode==undefined){mounted钩子}
仅仅组件的vm.$vnode有值,所以不执行里面的钩子