对Vue的生命周期的理解

news/2024/7/16 5:32:02

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

Vue的生命周期

  • 1. 生命周期是什么
  • 2. 生命周期过程图
  • 3. Vue的生命周期钩子函数
  • 4. 测试钩子函数


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.


http://www.niftyadmin.cn/n/4217497.html

相关文章

Vue学习Day2 v-bind动态绑定属性、计算属性、v-on事件监听、v-if、登陆切换小案例、v-show

想利用暑假时间好好学习一下vue&#xff0c;会记录每一天的学习内容。 今天是学习vue的第2天&#xff01; 起起伏伏乃人生常态&#xff0c;继续加油&#xff5e; 学习内容1. v-bind 使用简单使用v-bindv-bind语法糖v-bind动态绑定class对象语法v-bind动态绑定class数组语法v-bi…

Vue学习Day3 v-for遍历、组件的key属性、列表点击变色案例、书籍购物车案例

想利用暑假时间好好学习一下vue&#xff0c;会记录每一天的学习内容。 今天是学习vue的第3天&#xff01; 起起伏伏乃人生常态&#xff0c;继续加油&#xff5e; 学习内容1. v-for使用v-for遍历数组v-for遍历对象组件的key属性2.检测数组更新3.列表项点击变色简单案例4. 书籍购…

Vue学习Day4 v-model表单双向绑定、注册组件、组件模版分离、组件中的数据存放、组件中data为什么是个函数

想利用暑假时间好好学习一下vue&#xff0c;会记录每一天的学习内容。 今天是学习vue的第4天&#xff01; 起起伏伏乃人生常态&#xff0c;继续加油&#xff5e; 学习内容1. 表单绑定v-modelv-model原理v-model&#xff1a;radiov-model&#xff1a;checkboxv-model&#xff1a…

Myeclipse打开就出错Could not create the Java virtual machine

Myeclipse打开就出错Could not create the Java virtual machine 描述&#xff1a; JVM_terminted_Exit_code1图片&#xff1a;描述&#xff1a; Could_not create_the_Java_virtual_machine图片&#xff1a;myeclipse一启动就自动关闭&#xff0c;报错"Could not creat…

JavaScript高级程序设计 学习笔记3 - 语言基础

内容均摘自JavaScript高级程序设计第四版&#xff0c;仅用于记录学习过程。 虽然这一章都很基础&#xff0c;但是还是有很多小细节需要注意的&#xff01;好好看看吧&#xff5e;进一步细分了书里的目录&#xff0c;这样查询也更方便啦 第三章 语言基础一.语法3.1 语法3.1.1 区…

Myeclipse7.0安装时出现“灾难性故障”

Myeclipse7.0在安装过程中会报 “灾难性故障”&#xff0c;总结了一下&#xff0c;可能原因有一下几个方面 1. jdk版本和Myeclipse不兼容 解决方案&#xff1a;重新安装jdk新版本 2.安装路径的问题 解决方案&#xff1a;安装Myeclipse时&#xff0c;不修改其默认的安装路径…

mysql 的基本数据类型

数值类型 MySQL 的数值数据类型可以大致划分为两个类别&#xff0c;一个是整数&#xff0c;另一个是浮点数或小数。MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补。 表列出了各种数值类型以及它们的允许范围和占用的内存空间。 类型大小范围&#xff08;有符号&…

135,137,138,139,445端口作用

如果全是2000以上的系统,可以关闭137.138.139,只保留445 如果有98系统,可能以上四个端口全部要打开 无论你的服务器中安装的是Windows 2000 Server&#xff0c;还是Windows Server 2003&#xff0c;它们无一例外会在默认安装下开通135端口、137端口、138端口、139端口和445端口…