生命周期
Table of Contents
生命周期
图解
实例创建过程
创建一个实例
new Vue()
init(初始化)
beforeCreate()
injections和reactivity
created()
在beforeCreate的时候不可以修改data数据,最早在created中添加一些行为
在created完成以后,它会去判断instance(实例)中是否含有”el”option(选项),如果没有的话,它会调用vm.$mount(el)这个方法,然后执行下一步;如果有的话,直接进入下一步。接下来他会判断是否含有“template”这个选项,如果有的话,他会把template解析成一个render function, 这是一个template编译的过程,结果是解析成功了render函数:
render (h) {
return h('div', {}, this.text)
}
render函数中的h就是vue里面的createElement方法,return返回一个createElement方法,其中要传3个参数,第一个参数就是创建的div标签;第二个参数传了一个对象,就是组件上的props对象,或者是事件之类的东西或是事件之类的东西。第三个参数就是div标签里面的内容,就是data中的text。
使用render函数的结果和我们之前使用template解析出来的结果是一样的。render函数是发生在beforeMount和mounted之间的。也就是说在beforeMount的时候,$el还是我们之前写的html中的节点,然后到mounted的时候,它就把渲染出来的内容挂载到了DOM节点上。
在使用.vue文件开发的过程中,我们写的template模板,在经过了vue-loader的处理之后,就变成了render function, 最终放到了vue-loader解析过的文件里面。这样的好处就是:我们在在页面上执行vue代码的时候,效率高。
beforeMount在有了render function的时候才会执行,当执行完render function之后,就会调用mounted这个钩子,在mounted挂载完毕以后,这个实力算是初步创建好了。
后面的钩子函数都是需要外部的触发才会执行。比如数据的变化,会调用beforeUpdate,然后进过Virtual DOM,最后updated更新完毕。当组件
- vue的双向数据绑定
- Object.defineProperty()
- 观察者模式
- 让双向绑定更有效率
- 一对多的模式
- 一:改了一个地方
- 多:页面凡是用了数据的地方都更新
- 数据劫持,就是通过defineProperty()