Vue生命周期
2022/9/7
Vue生命周期
定义
- 又名:生命周期回调函数、生命周期函数、生命周期钩子。
- 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。
- 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
- 生命周期函数中的this指向是 vm 或 组件实例对象。
生命周期四大阶段
初始化阶段:
- beforeCreate:实例刚创建完成,此时还没有data和methods属性
- created:vue实例data和method属性已经初始化完成,此时还没有编译模板
实例挂载阶段
beforeMount:挂载前 模板编译完成,此时e l 还 没 有 挂 载 , el还没有挂载,data目前可见
mounted:挂载完成后 模板编译完成,$el挂载完成
数据更新阶段
- beforeUpdate :数据更新时执行,data数据此时已经是最新的数据,UI界面还是旧的
- updated:数据更新完成后,界面和data里的数据此时都是最新的,完成的界面的更新渲染render
销毁阶段
beforeDestroy:销毁前 实例准备销毁,此时data和methods方法都能用
destroyed:销毁后 实例销毁完成,此时原先创建的实例方法和属性都不可以属性

代码演示
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h2>当前的n值是:{{n}}</h2>
<button @click="add">点我n+1</button>
<button @click="bye">点我销毁vm</button>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止vue在启动时生成生产提示
new Vue({
el: '#root',
// template会整个替换掉<div id="root"></div>
// template:`
// <div>
// <h2>当前的n值是:{{n}}</h2>
// <button @click="add">点我n+1</button>
// </div>
// `,
data: {
n: 1,
},
methods: {
add(){
this.n++
},
bye(){
console.log('bye')
this.$destroy()
}
},
beforeCreate() {
console.log('beforeCreate')
},
created() {
console.log('created')
},
beforeMount() {
console.log('beforeMount')
},
mounted() {
console.log('mounted')
},
beforeUpdate() {
console.log('beforeUpdate')
},
updated() {
console.log('updated')
},
beforeDestroy() {
console.log('beforeDestroy')
},
destroyed() {
console.log('destroy')
},
})
</script>生命周期总结
常用的生命周期钩子:
mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等收尾工作
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>引出生命周期</title>
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h2 :style="{opacity}">欢迎学习Vue</h2>
<button @click="opacity = 1">透明度设置为1</button>
<button @click="stop">点我停止变换</button>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
opacity:1
},
methods: {
stop(){
this.$destroy()
}
},
mounted(){
console.log('mounted',this)
this.timer = setInterval(() => {
console.log('setInterval')
this.opacity -= 0.01
if(this.opacity <= 0) this.opacity = 1
},16)
},
beforeDestroy() {
clearInterval(this.timer)
console.log('vm即将驾鹤西游了')
},
})
</script>
</html>
关于销毁Vue实例
- 销毁后借助Vue开发者工具看不到任何信息
- 销毁后自定义事件会失效,但原生DOM事件依然有效(比如点击事件等触发)
- 一般不会在
beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了
