对Vue的生命周期的理解

因为是第一天学习vue,可能有理解不全面或者错误的地方,如果有误导,非常抱歉。


1. 生命周期是什么

  • Vue的每个组件都是独立的,从一个组件创建数据初始化挂载更新销毁,这就是一个组件的生命周期
  • 每个Vue实例在被创建时都要经过一系列的初始化过程,例如:需要设置数据监听、编译模版、将实例挂载到DOM、在数据变化时更新DOM等。在这个过程中会运行一些生命周期钩子函数,使用户可在不同阶段添加自己的代码。
  • 生命周期钩子需要写在new Vue({})时传递的对象内,以属性的方式进行声明
  • ⚠️:不能使用箭头函数来定义一个生命周期钩子

2. 生命周期过程图

在这里插入图片描述


3. Vue的生命周期钩子函数

  • 创建期间的钩子:
    • beforeCreate:此时实例刚被创建出来,但还没有初始化好data和methods属性
    • created: 实例的data和methods属性已经初始化,但此时还没开始编译模版
    • beforeMount:此时已经完成了编译好了最终模版,但还没有将模版渲染到页面上
    • mounted:此时已经将编译好的模版渲染到页面上
  • 运行期间的钩子
    • beforeUpdate:Vue实例中保存数据被修改了,但界面还未更新
    • updated:data中保存数据和界面上显示的数据都完成了更新
  • 销毁期间的钩子
    • beforeDestroy当前组件即将被销毁
    • destroyed当前组件已经被销毁

4. 测试钩子函数

// 测试用的数据长下面这样
<div id="app">
	<p>{{message}}</p>
</div>
<script>
	const app = new Vue({
		el: '#app',
        data: {
        	message: 'Hi Vue'
        },
		methods: {
			say: function() {
				console.log('hello vue');
			}
		}
	})

1.beforeCreate
此时实例刚被创建出来,但还没有初始化好data和methods属性

beforeCreate: function () {
	console.log(this.message); // 测试data属性
	console.log(this.say); // 测试methods属性
	console.log('beforeCreate');
}

控制台输出结果:

在这里插入图片描述


2.created
实例的data和methods属性已经初始化,但此时还没开始编译模版

// 调用created的时候,是我们能最早访问Vue实例中保存的数据和方法的地方
created: function () {
	console.log(this.message); // 测试data属性
	console.log(this.say); // 测试methods属性
	console.log('created');
},

控制台输出结果:

在这里插入图片描述


3.beforeMount
此时已经完成了编译好了最终模版,但还没有将模版渲染(挂载)到页面上

beforeMount: function () {
    console.log(document.querySelector("p").innerHTML); // 测试模版是否渲染到页面上
    console.log(document.querySelector("p").innerText); // 测试模版是否渲染到页面上
    console.log("beforeMount");
},  

控制台输出结果:

在这里插入图片描述


4.mounted
此时已经将编译好的模版渲染(挂载)到页面上

mounted: function () {
    console.log(document.querySelector("p").innerHTML); // 测试模版是否渲染到页面上
    console.log(document.querySelector("p").innerText); // 测试模版是否渲染到页面上
    console.log("mounted");
},

控制台输出结果:

在这里插入图片描述


5.beforeUpdate
Vue实例中保存数据被修改了,但界面还未更新
⚠️:只有保存数据被修改了才会调用beforeUpdate,否则不会调用

beforeUpdate: function () {
    console.log(this.message);  // 验证数据是否变化
    console.log(document.querySelector("p").innerHTML);  // 验证界面是否对应更新
    console.log(document.querySelector("p").innerText); 
    console.log("beforeUpdate");
},

在控制台中修改data中的message
此时data中的message已改变,但界面中<p>中的内容未变

在这里插入图片描述


6.updated
data中保存数据和界面上显示的数据都完成了更新

updated: function () {
    console.log(this.message); // 验证数据是否变化
    console.log(document.querySelector("p").innerHTML); // 验证界面是否对应更新
    console.log(document.querySelector("p").innerText);
    console.log("updated");
},

在控制台中修改data中的message
此时data中的message已改变,界面中<p>中的内容也相应改变

在这里插入图片描述


7.beforeDestroy
当前组件即将被销毁
当我们不需要vue操纵DOM时,就需要销毁Vue,清除vue实例和DOM的关联
beforeDestroy函数是我们最后能够访问到组件数据和方法的函数


8.destroyed
当前组件已经被销毁
在销毁后,会触发 destroyed钩子函数


部分参考:vuejs官网
https://cn.vuejs.org.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值