vue生命周期
组件从 创建 到 销毁 的整个过程就是生命周期
钩子函数
Vue 框架内置函数,随着组件的生命周期阶段,自动执行
作用:
特定的时间点,执行特定的操作
场景:
组价创建完毕后,可以在created 生命周期函数中发起Ajax 请求,从而初始化 data 数据
分类:
4大阶段8个方法
- 初始化
- 挂载
- 更新
- 销毁
方法:
-
beforeCreate
-
created
-
beforeMount
-
mounted
-
beforeUpdate
-
updated
-
beforeDestroy
-
destroyed

初始化阶段
目标:
掌握初始化阶段2个钩子函数作用和执行时机
含义讲解:
-
new Vue() - Vue实例化(组件也是一个小的Vue实例)
-
Init Events & Lifecycle - 初始化事件和生命周期函数
-
beforeCreate - 生命周期钩子函数被执行
-
Init injections&reactivity - Vue内部添加data和methods等
-
created - 生命周期钩子函数被执行,实例创建
接下来是编译模板阶段 - 开始分析
-
Has el option ? -是否有el选项 - 检查要挂到哪里
没有,调用$mount()方法
有,继续检查template选项

案例:
// 初始化
// new Vue()以后, vue内部给实例对象添加了一些属性和方法, data和methods初始化"之前"
beforeCreate() {
console.log("beforeCreate -- 执行");
console.log(this.msg);
// undefined
},
// data和methods初始化以后
// 场景: 网络请求, 注册全局事件
created() {
console.log("created -- 执行");
console.log(this.msg);
// hello, Vue
},
挂载阶段
目标:
掌握挂载阶段2个钩子函数作用和执行时机
含义讲解:
-
template 选项检查
有 -编译template返回render渲染函数
无 -编译el选项对应标签作为template(要渲染的模板)
-
虚拟DOM挂载成真实DOM之前
-
beforeMount - 生命周期钩子函数被执行
-
Create -把虚拟DOM和渲染的数据一并挂到真实DOM上
-
真实DOM挂载完毕
-
mounted -生命周期钩子函数被执行

// 挂载
// 真实DOM挂载之前
// 场景: 预处理data, 不会触发updated钩子函数
beforeMount() {
console.log("beforeMount -- 执行");
console.log(document.getElementById("myP"));
// null
this.msg = "重新值"
},
// 真实DOM挂载以后
// 场景: 挂载后真实DOM
mounted() {
console.log("mounted -- 执行");
console.log(document.getElementById("myP"));
},
更新阶段
目标:
掌握更新阶段2个钩子函数作用和执行时机
含义讲解:
- 当data里数据改变,更新DOM之前
- beforeUpdate -生命周期钩子函数被执行
- Virtual DOM… - 虚拟DOM重新渲染,打补丁到真实DOM
- updated - 生命周期钩子函数被执行
- 当有data数据改变 - 重复这个循环

// 更新
// 前提: data数据改变才执行
// 更新之前
beforeUpdate(){
console.log("beforeUpdate -- 执行");
console.log(document.querySelectorAll("#myUL>li")[4]); // undefined
},
// 更新之后
// 场景: 获取更新后的真实DOM
updated() {
console.log("updated -- 执行");
console.log(document.querySelectorAll("#myUL>li")[4]);
},
销毁阶段
目标:掌握销毁阶段2个钩子函数作用和执行时机
含义讲解:
- 当$destroy()被调用 - 比如组件DOM被移除(例 v-if)
- beforeDestroy - 生命周期钩子函数被执行
- 拆卸数据监视器,子组件和事件侦听器
- 实例销毁后,最后触发一个钩子函数
- destroyed - 生命周期钩子函数被执行

// 销毁
// 前提: v-if="false" 销毁Vue实例
// 场景: 移除全局事件, 移除当前组件, 计时器, 定时器, eventBus移除事件$off方法
beforeDestroy(){
console.log('beforeDestroy -- 执行');
clearInterval(this.timer)
},
destroyed(){
console.log("destroyed -- 执行");
}
13万+

被折叠的 条评论
为什么被折叠?



