生命周期
beforeCreate( 创建前 )
在实例初始化之后,此时组件的选项对象还未创建,el和data并未初始化,因此无法访问methods,data,computed等上的方法和数据。
create(创建阶段)
在创建阶段,执行data数据注入、data数据劫持,遍历data选项,用Object.definePropoty()给每个data选项添加set和get方法,把劫持的变量都放在组件实例上。
beforeMount(挂在前)
通过el,template寻找视图组件,把找到的template视图编译成render函数。
mounted(挂载)
根据render渲染函数,生成"抽象语法树AST",AST第一次被创建成虚拟DOM(VNode),根据VNode创建真实DOM把那些声明式变量替换成真实数据,至此dom渲染完成。
updated(更新)
当被劫持过的data数据发生变化时,就进入该阶段。data发生变化,render函数将再生成一个新的VNode,然后diff算法就会通过patch找出两个VNode之间的最小差异,然后notify再通过Wather根据"依赖收集"再次更新真实DOM。