引出生命周期、生命周期_挂载流程、生命周期_更新流程、生命周期_销毁流程、生命周期_总结——Vue

news2025/3/2 8:47:17

目录

一、引出生命周期

二、生命周期_挂载流程

三、生命周期_更新流程

四、生命周期_销毁流程

五、生命周期_总结

一、引出生命周期

生命周期:

    1.又名:生命周期回调函数、生命周期函数、生命周期钩子。

    2.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数

    3.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。

    4.生命周期函数中的this 指向vm组件实例对象

Vue完成模板的解析并把初始的真实的DOM元素放入页面后(挂载完毕)调用mounted

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>document</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>	
</head>
<body>	
	
	<div id="root">
		<h2 v-if="a">你好啊</h2>
		<!-- {opacity}为{opacity: opacity}的简写形式,第一个opacity为属性,第二个为属性值 -->
		<h2 :style="{opacity}">欢迎学习Vue</h2>
		<!-- {{change()}} -->
	</div>

	<script type="text/javascript">	
		Vue.config.productionTip = false
	
		const vm = new Vue({
			el:'#root',
			data:{
				opacity:1,
				a:false,
			},
			methods:{
				/* change(){
					setInterval(()=>{
						this.opacity -= 0.01
						if(this.opacity <= 0) this.opacity = 1
					},16)
				}, */
			},
			// Vue完成模板的解析并把初始的真实的DOM元素放入页面后(挂载完毕)调用mounted
			mounted() {
				console.log('mounted',this);//此处的this是vue实例
				setInterval(()=>{
					vm.opacity -= 0.01
					if(vm.opacity <= 0) vm.opacity = 1
				},16)
			},			
		})

		// 通过外部的定时器实现(不推荐)
		/* setInterval(()=>{
			vm.opacity -= 0.01
			if(vm.opacity <= 0) vm.opacity = 1
		},16) */
	</script>
</body>
</html>

二、生命周期_挂载流程

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>

</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="root">
        <h2 v-if="false">你好啊</h2>
        <h2 :style="{opacity}">欢迎学习 Vue</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="add">点我 n+1</button>
    </div>

    <script type="text/javascript">
        const vm = new Vue({
            el: '#root',
            // template: ` 
            //     <div>
            //         <h2>当前的n值是:{{n}}</h2>
            //         <button @click="add">点我 n+1</button>
            //     </div>
            // `,
            data: {
                opacity:1,
                n: 1
            },
            methods: {
                add(){
                    this.n++
                }
            },
            beforeCreate() {
                console.log('beforeCreate')
                // console.log(this);
                // debugger
            },
            created() {
                console.log('created')
                // console.log(this);
                // debugger
            },
            beforeMount() {
                console.log('beforeMount')
                // console.log(this);
                // debugger               
            },
            mounted(){
                console.log('mounted')
                // console.log(this);
                // debugger   
                /* setInterval(() => {
                    this.opacity -= 0.01
                    if (this.opacity < 0) {
                        this.opacity = 1
                    }
                }, 16) */
            }
       
        })    
     
    </script>
</body>
</html>

三、生命周期_更新流程

在哪个生命周期 钩子中页面与数据尚未不同步: beforeUpdate

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>

</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="root">
        <h2 v-if="false">你好啊</h2>
        <h2 :style="{opacity}">欢迎学习 Vue</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="add">点我 n+1</button>
    </div>

    <script type="text/javascript">
        const vm = new Vue({
            el: '#root',
            // template: ` 
            //     <div>
            //         <h2>当前的n值是:{{n}}</h2>
            //         <button @click="add">点我 n+1</button>
            //     </div>
            // `,
            data: {
                opacity:1,
                n: 1
            },
            methods: {
                add(){
                    this.n++
                }
            },
            beforeCreate() {
                console.log('beforeCreate')
                // console.log(this);
                // debugger
            },
            created() {
                console.log('created')
                // console.log(this);
                // debugger
            },
            beforeMount() {
                console.log('beforeMount')
                // console.log(this);
                // debugger               
            },
            mounted(){
                console.log('mounted',this.$el,this.$el instanceof HTMLElement)
                // console.log(this);
                // debugger   
                /* setInterval(() => {
                    this.opacity -= 0.01
                    if (this.opacity < 0) {
                        this.opacity = 1
                    }
                }, 16) */
            },
            beforeUpdate() {
                console.log('beforeUpdate')
                // console.log(this.n);  //点击按钮 此时已变成 2
                // debugger
            },
            updated() {
                console.log('updated')
                debugger
            },
       
        })    
     
    </script>
</body>
</html>

四、生命周期_销毁流程

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>

</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="root">
        <h2 v-if="false">你好啊</h2>
        <h2 :style="{opacity}">欢迎学习 Vue</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="add">点我 n+1</button>
        <button @click="bye">点我销毁vm</button>
    </div>

    <script type="text/javascript">
        const vm = new Vue({
            el: '#root',
            // template: ` 
            //     <div>
            //         <h2>当前的n值是:{{n}}</h2>
            //         <button @click="add">点我 n+1</button>
            //     </div>
            // `,
            data: {
                opacity:1,
                n: 1
            },
            methods: {
                add(){
                    console.log('add');
                    this.n++
                },
                bye(){
                    console.log('bye');
                    this.$destroy()
                }
            },
            beforeCreate() {
                console.log('beforeCreate')
                // console.log(this);
                // debugger
            },
            created() {
                console.log('created')
                // console.log(this);
                // debugger
            },
            beforeMount() {
                console.log('beforeMount')
                // console.log(this);
                // debugger               
            },
            mounted(){
                console.log('mounted',this.$el,this.$el instanceof HTMLElement)
                // console.log(this);
                // debugger   
                /* setInterval(() => {
                    this.opacity -= 0.01
                    if (this.opacity < 0) {
                        this.opacity = 1
                    }
                }, 16) */
            },
            beforeUpdate() {
                console.log('beforeUpdate')
                // console.log(this.n);  //点击按钮 此时已变成 2
                // debugger
            },
            updated() {
                console.log('updated')
                // debugger
            },
            beforeDestroy() {
                console.log('beforeDestroy')
                console.log(this.n)
                this.add()  //仍可使用 add,但对数据触发的操作不再更新,所以页面中 的n不会改变
            },
            destroyed() {
                console.log('destroyed')
            },
        })         
    </script>
</body>
</html>

五、生命周期_总结

上面一共讲了8 个生命周期,也就是4 对生命周期

beforeCreate 与 created  指数据检测与数据代理创建之前和之后

beforeMount 与 Mounted  

beforeUpdate 与 updated

beforeDestroy 与 destroy 

常用的生命周期钩子:
     1.mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
     2.beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

 关于销毁Vue实例
     1.  销毁后借助Vue开发者工具看不到任何信息。
     2.  销毁后自定义事件会失效,但原生DOM事件依然有效。

     3.  一般不会在beforeDestroy 操作数据,因为即便操作数据,也不会再触发更新流程了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script 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>

    <script type="text/javascript">

        const vm = new Vue({
            el: '#root',
            data: {
                opacity:1,
            },
            methods: {
                stop(){
                    
                    this.$destroy()
                }
            },
            mounted(){  
                this.timer = setInterval(() => {
                    this.opacity -= 0.01
                    console.log('定时器');
                    if (this.opacity < 0) {
                        this.opacity = 1
                    }
                }, 16)
            },
            beforeDestroy() {
                console.log();
                clearInterval(this.timer)
            },           
        })         
    </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos安装 jenkins

目录 一、安装 jdk 二、安装 maven 三、安装 jenkins 官网地址&#xff1a;Jenkins 一、安装 jdk 首先检索包含 java 的列表 yum list java* 检索1.8的列表 yum list java-1.8* 安装 1.8.0 的所有文件 yum install java-1.8.0-openjdk* -y使用命令检查是否安装成功 …

Git图解-IDEA中的Git操作

目录 一、配置Idea 二、项目克隆 三、文件状态识别 四、Git操作 4.1 git add--添加暂存区 4.2 git commit--提交本地仓库 4.3 git push--推送远程仓库 4.4 git pull--更新本地仓库 五、完整开发流程 5.1 步骤1&#xff1a;克隆项目 5.2 步骤2&#xff1a;创建自己开发…

呆头鹅批量剪辑软件,一天制作1000+视频过审神器,0基础批量操作

当我们需要处理大量的视频时&#xff0c;怎么样才能够让工作变得更加简单&#xff1f;可以来试试呆头鹅批量剪辑软件&#xff0c;软件功能非常强大&#xff0c;支持批量剪辑视频&#xff0c;剪辑的过程中可以设置输出的位置和分辨率&#xff0c;同时可以对视频进行一些编辑处理…

CentOS定时任务——crontab

crontab Linux crontab 是用来定期执行程序的命令。 crond 命令每分钟会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便会自动执行该工作。 注意&#xff1a;新创建的 cron 任务&#xff0c;不会马上执行&#xff0c;至少要过 2 分钟后才可以&#xff0c;当然你…

软件测试16

在桌面上打开终端窗口, 执行如下操作: 将根目录下所有文件的详细信息输出到 demo 文件中查看 demo 文件前 5 行内容查看 demo 文件后 5 行内容将 ping www.itheima.com 的信息输出到 ping_log 文件中重新开启一个终端窗口, 动态查看 ping_log 文件中的信息 查看日志文件内容…

unity3D基础操作之01--unity3d窗口界面介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录最常使用5种窗口1、Scene场景编辑窗口2、Game游戏运行窗口需要注意的是3、Hierarchy场景物体列表窗口4、Project项目资源列表窗口需要注意的是5、Inspector属性编辑列…

4.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理

本文目录如下&#xff1a;一、Nacos微服务治理Nacos 下载 与 启动Spring Cloud 集成 NacosIDEA 同一个 Application 启动多次Nacos - 配置集群Nacos - 设置负载均衡Nacos - 设置服务实例的权重二、Nacos 配置管理Nacos - 合理的把配置信息迁移到 Nacos 中Nacos - 如何使用 Naco…

自然语言处理中数据增强(Data Augmentation)技术最全盘点

与“计算机视觉”中使用图像数据增强的标准做法不同&#xff0c;在NLP中&#xff0c;文本数据的增强非常少见。这是因为对图像的琐碎操作&#xff08;例如将图像旋转几度或将其转换为灰度&#xff09;不会改变其语义。语义上不变的转换的存在是使增强成为Computer Vision研究中…

【Java开发】设计模式 03:建造者模式

1 建造者模式介绍建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。当一个类的构造函数参数个数超过4个&#xff0c;而且这些参数有些是可选的参数&#xff0c;考虑使用构造者模式。&#x1f4cc; 场景当一个类的构造函数参数超过4个&#xff0c;而且这些参数有些是…

【论文研读 上】基于开源软件的无人机飞行仿真 鹿珂珂,刘登攀,王超

基于开源软件的无人机飞行仿真 摘 要 飞行控制算法设计和仿真是无人机研制的关键步骤。为了缩短无人机飞行控制算法设计周期和试验成本&#xff0c;对无人 机纵向和侧向控制算法进行了设计&#xff0c;并基于开源软件开发了固定翼无人机可视化的飞行仿真系统&#xff0c; 固定…

Kafka入门教程

1 Kafka安装 1.1 压缩包安装 1.1.1 JDK环境安装 Kafka是依赖JDK环境的,所以需要事先安装好JDK 下载JDK安装包: Oracle JDK8下载SSH上传到想要安装的目录,比如 /opt.然后使用tar -zxvf jdk-8u351-linux-x64.tar.gz命令解压 添加环境变量 vi /etc/profile,输入如下内容保存后…

【9.数据页结构】

概述 InnoDB 的数据是按「数据页」为单位来读写的&#xff0c;也就是说&#xff0c;当需要读一条记录的时候&#xff0c;并不是将这个记录本身从磁盘读出来&#xff0c;而是以页为单位&#xff0c;将其整体读入内存。数据库的 I/O 操作的最小单位是页&#xff0c;InnoDB 数据页…

【Linux内核三】网络丢包debug案例

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 前言 测试环境 测试现象 ​编辑 定位过程 ​编辑 优化手段 1、加大ring buffer …

X86ARM @Linux平台cache eviction功能测试

经典的ARM处理器高速缓存工作原理: 高速缓存内部结构:

Qt样式表

1>样式表介绍 样式表可通过 QApplication::setStyleSheet()函数将其设置到整个应用程序上&#xff0c;也可以使用 QWidget::setStyleSheet()将其设置到指定的部件或子部件上&#xff0c;不同级别均可设置样式表&#xff0c;称为样式表的层叠。样式表也可通过设计模式编辑样…

vue中render函数的作用及解析

在vue脚手架的main.js文件中&#xff0c;存在这样一段代码&#xff1a; 意思是对vue实例的配置&#xff0c;其中render函数的作用是&#xff0c;将h创建的Node节点信息return返回给Vue.js底层处理文件中的beforeMount()生命周期钩子函数&#xff0c;让其将Node节点信息在界面中…

智能优化算法之蚁群算法

1、蚁群算法概述 蚁群算法&#xff08;Ant Colony Algorithm, ACA&#xff09; 由Marco Dorigo于1992年在他的博士论文中首次提出&#xff0c; 该算法模拟了自然界中蚂蚁的觅食行为。 蚂蚁在寻找食物源时&#xff0c; 会在其经过的路径上释放一种信息素&#xff0c; 并能够感知…

配对变量t检验

区别双变量t检验&#xff0c;见&#xff1a;https://mp.csdn.net/postedit/100640098 配对变量为两两相关的变量&#xff1a;如敷药前后体重变化。 要求&#xff1a;两变量服从正态分布。 SPSS演练 打开数据文件&#xff1a;ptest.sav 载地址&#xff1a;https://download.c…

vscode环境配置文件生成

使用vscode进行C开发时&#xff0c;除了需要安装相应的插件&#xff08;例如&#xff1a;C/C、CMake、MySql等&#xff09;外&#xff0c;还需要对相应的开发环境进行配置&#xff0c;和vs中的环境配置道理相通。一、编译文件介绍配置 C 环境时&#xff0c;会生成.vscode 文件夹…

记录一次消毒碗柜维修

现象&#xff1a;按开始消毒后马上停止&#xff0c;但可以一直按着按钮&#xff0c;就可以消毒&#xff0c;并且30分钟后可以自动停止。分析&#xff1a;消毒柜里面控制器就这3个1 开关只是触发通电&#xff0c;弹起就断开&#xff0c;按下可以接通&#xff0c;判断该零件正常2…