什么是生命周期?
我们把一个对象从生成到被销毁的过程,称为生命周期。而生命周期函数,就是在某个时刻会自动执行的函数。
beforeCreate() 和 created() 创建阶段:
生命周期函数 | 这个阶段发生了什么? |
---|
beforeCreate() | 这个阶段data中的数据 和methods中的方法 都还没有初始化 ,Vue实例刚在内存中创建 |
created() | 这个阶段data中的数据 和methods中的方法 已经初始化完成,Vue实例已经创建好了,模板还没有编译 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<father></father>
</div>
</body>
<script>
Vue.component('Father', {
template: `
<div class="father">
<h3>我是父组件</h3>
<son></son>
</div>
`,
})
Vue.component('Son', {
template: `
<div class="son">
<h3>我是子组件</h3>
</div>
`,
data() {
return {
message: '我是原始的数据:张三'
}
},
methods: {
btnClick() {
console.log("我是子组件的方法");
}
},
beforeCreate() {
console.log('beforeCreate阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#app').innerHTML);
console.log('-----------------------');
},
created() {
console.log('created阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#app').innerHTML);
console.log('-----------------------');
},
})
new Vue({
el: '#app'
})
</script>
</html>
![在这里插入图片描述](https://img-blog.csdnimg.cn/81c90673940641d3b6cdc3fd2def47a9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQi5Ceg==,size_20,color_FFFFFF,t_70,g_se,x_16)
beforeMount() 和 mounted() 的挂载阶段:
生命周期函数 | 这个阶段发生了什么? |
---|
beforeMount() | 这个阶段完成了模板的编译 ,但是没有挂载到页面上 |
mounted() | 这个阶段 模板编译好并挂载到了页面中 ,页面可以正常显示了 |
beforeMount() {
console.log('beforeMount阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#app').innerHTML);
console.log('-----------------------');
},
mounted() {
console.log('mounted阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#app').innerHTML);
console.log('-----------------------');
},
![在这里插入图片描述](https://img-blog.csdnimg.cn/b43bdb121a67405a870883c3247aac02.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQi5Ceg==,size_20,color_FFFFFF,t_70,g_se,x_16)
beforeUpdate() 和 updated() 的更新阶段:
生命周期函数 | 这个阶段发生了什么? |
---|
beforeUpdate() | 状态更新之前执行 这个阶段data中的数据已经更新 但是还没有渲染到DOM上 |
updated() | 状态更新完成后执行 这个阶段data和DOM中的节点数据都是更新后的 |
beforeUpdate() {
console.log('beforeUpdate阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#ppp').innerHTML);
console.log('-----------------------');
},
updated() {
console.log('updated阶段');
console.log(this.message);
console.log(this.btnClick);
console.log(this.$el);
console.log(document.querySelector('#ppp').innerHTML);
console.log('-----------------------');
},
![在这里插入图片描述](https://img-blog.csdnimg.cn/d42330b90ecd44b6bc41f3c1b18488de.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQi5Ceg==,size_20,color_FFFFFF,t_70,g_se,x_16)
beforeDestroy() 和 destroyed() 的销毁阶段:
生命周期函数 | 这个阶段发生了什么? |
---|
beforeUpdate() | 销毁阶段之前 这个阶段Vue实例还可以使用 |
updated() | Vue实例销毁后调用,此时所有实例指向的所有东西都会被解除 |
生命周期流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/5d65a2c1c330446c988fa38daca5fcb5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQi5Ceg==,size_20,color_FFFFFF,t_70,g_se,x_16)