详解 Vue 生命周期
Vue生命周期
Vue的生命周期:
Vue实例从创建到销毁的过程为生命周期,即指从创建、初始化数据、编译模板、挂载Dom到渲染、更新到渲染、销毁的一系列过程,它主要分为8个阶段:创建前后、载入前后、更新前后、销毁前后以及一些特殊场景的生命周期。
生命周期 | 描述 |
---|---|
| 组件实例被创建之初 执行时组件实例还未创建,通常用于插件开发中执行一些初始化任务 |
| 组件实例已经完全创建 组件实例初始化完毕,各种数据可以使用,常用于异步数据获取 |
| 组件挂载之前 未执行渲染、更新,dom 未创建 |
| 组件挂载到实例上去之后 初始化结束,dom 已创建,可用于获取访问数据和 dom 元素 |
| 组件数据发生变化,更新之前 更新前,可用于获取更新前各种状态 |
| 组件数据更新之后 更新后,所有状态已是最新 |
| 组件实例销毁之前 销毁前,可用于一些定时器或订阅的取消 |
| 组件实例销毁之后 组件已销毁 |
| keep-alive 缓存的组件激活时 |
| keep-alive 缓存的组件停用时调用 |
| 捕获一个来自子孙组件的错误时被调用 |
Vue生命周期的整体流程如下图所示:
beforeCreate
→created
初始化vue实例,进行数据观测
created
完成数据观测,属性与方法的计算,watch、event事件回调的配置
可调用methods中的方法,访问和修改data数据触发响应式渲染dom
可通过computed和watch完成数据计算
此时vm.$el并未被创建
created
→beforeMount
判断是否存在el选项,不存在则停止编译,直至调用vm.$mounted(el)才会继续编译
优先级:render > template > 外层HTML
vm.el获取到的是挂载dom的
beforeMount
此阶段可获取到vm.el,vm.el虽已完成dom初始化,但并未挂载在el选项上
beforeMount
→mounted
vm.el完成挂载,vm.$el生成的dom替换了el选项对应的dom
mounted
vm.el已经完成dom的挂载与渲染,此刻打印vm.$el,发现之前的挂载点及内容已被替换为新的dom
beforeUpdate
更新的数据必须是被渲染在模板上的(el、template、render之一)
此时view层还未更新;若再次修改数据,不会再次触发更新方法
updated
完成view层的更新;若再次修改数据,会再次触发更新方法(beforeUpdate、updated)
beforeDestroy
实例被销毁前调用,此时实例属性与方法仍可访问
destroyed
完全销毁一个实例
可清理它与其它实例的连接,解绑它的全部指令及事件监听器
并不能清除dom,仅仅销毁实例
created 与 mounted
created | mounted | |
---|---|---|
不同点 | 是在组件实例一旦创建完成的时候立刻调用, 页面 dom 节点并未生成,触发时机比 mounted 更早 | 是在页面 dom 节点渲染完毕后立刻执行的 |
相同点 | 都能拿到实例对象的属性和方法 |
Vue父子组件生命周期顺序
未完待续……
Vue和jQuery
jQuery:事件驱动
Vue:数据驱动,双向绑定,设计模式MVVM,单文件模式
M:Model 数据逻辑处理
V:View 视图
VM:View Model 数据视图
- 感谢你赐予我前进的力量