【Vue】生命周期一文详解

目录

前言

生命周期

钩子函数使用方法

​编辑

周期-----创建阶段

创建阶段做了些什么事

该阶段可以干什么

周期----挂载阶段

挂载阶段做了什么事

该阶段适合干什么

周期----更新阶段

更新阶段做了什么事

该阶段适合做什么

周期----销毁阶段

销毁阶段做了什么事

该阶段适合做什么


前言

Vue生命周期分为四个周期:创建、挂载、更新、销毁

生命周期

每个周期对应两个函数,对应的函数又叫钩子函数

创建:

beforeCreate()        ------        创建前

created()                ------        创建后

挂载:

beforeMount()        ------       挂载前

mounted()               ------        挂载后

更新:

beforeUpdate()        ------        更新前

updated()                -----        更新后

销毁:

beforeDestroy()        -------        销毁前

destroyed()                ------        销毁后

钩子函数使用方法

<div class="app"><h1>{{msg}}</h1>{{num}}<button @click="add()">+1</button><button @click="destroy()">销毁</button></div><script>const vm = new Vue({el:'.app',data:{msg:'Vue的生命周期',num:1},methods:{add(){this.num++},destroy(){this.$destroy()}},// 创建// 创建前beforeCreate(){console.log('beforeCreate');},// 创建后created(){console.log('Created');},// 挂载// 挂载前beforeMount(){console.log('beforeMount');               },// 挂载后mounted(){console.log('Mounted');},// 更新// 更新前beforeUpdate(){console.log('beforeUpdata');},// 更新后updated(){console.log('Updataed');},// 销毁// 销毁前beforeDestroy(){console.log('beforeDestory');},// 销毁后destroyed(){console.log( 'Destoryed');}})</script>

更新数据

销毁

调用该方法

this.$destroy()

周期-----创建阶段

生成虚拟dom

该周期包含两个钩子函数,创建前beforeCreate()和创建后Created()

所谓的创建不是指Vue实例的创建,而是指数据代理和数据监测的创建,以此来分创建前和创建后

在创建前,是无法访问data中的数据的,包括methods

例:

在原代码的基础上,访问data中的num

 //创建前

beforeCreate(){

                console.log('beforeCreate',this.num);

            }

创建后是可以访问的,包括methods

// 创建后

            created(){

                console.log('Created',this.num);

            }

创建阶段做了些什么事

  1. 创建Vue实例vm
  2. 初始化事件对象和生命周期
  3. 调用beforeCreate()钩子函数(此时还无法通过vm去访问data中的属性)
  4. 初始化数据代理和数据监测
  5. 调用created()钩子函数(此时数据代理和数据监测已经创建完毕,可以通过vm去访问data中的属性)
  6. 编译模板语句生成虚拟dom(此时只是生成虚拟dom,页面上还没有渲染)

该阶段可以干什么

  • beforeCreate():可以在此时加一些loading效果
  • created:结束loading效果,发送一些网络请求,获取数据,也可以添加定时器

周期----挂载阶段

生成真实dom

该阶段包含两个钩子函数,挂载前beforeMount()和挂载后mounted()

挂载前和挂载后中间存在一个真实dom的生成

而挂载前和创建后之间存在一个虚拟dom的生成

在挂载前,是无法修改页面内容的

// 挂载前

            beforeMount(){

                console.log('beforeMount');

                document.querySelector('h1').innerHTML='挂载'

            }

挂载后是可以修改的

// 挂载后

            mounted(){

                console.log('Mounted');

                document.querySelector('h1').innerHTML='挂载'

            }

挂载阶段做了什么事

  1. 调用beforeMount()钩子函数(此时页面还未渲染,真实dom还没生成)
  2. 给vm追加$el属性,用它来代替"el",$el代表了真实的dom元素(此时真实dom生成,页面渲染完成)
  3. 调用mounted()钩子函数

该阶段适合干什么

mounted:可以操作页面的dom元素了

周期----更新阶段

该阶段只有在data变化后才会触发,进行重新渲染

该周期包含两个钩子函数,更新前beforeUpdate()和更新后updated()

这里的更新前是指data中的数据更新了,但是页面还没重新渲染前

更新前

使用断点debugger

 // 更新前

            beforeUpdate(){

                console.log('beforeUpdata');

                debugger

            }

更新后

解开断点

//更新后

 updated(){

                console.log('Updataed');

            }

其中diff算法就是在更新前和更新后之间进行的,虚拟dom进行对比,生成真实dom渲染到页面

更新阶段做了什么事

  1. data发生改变(这是该阶段开始的标志)
  2. 调用beforeUpdate()钩子函数(此时只是内存中的data数据发生变化,页面还没更新)
  3. 虚拟dom重新渲染和修补
  4. 调用updated()钩子函数(此时页面已更新)

该阶段适合做什么

  • beforeUpdate:适合在更新之前访问现有的dom,例,手动清除已添加的事件监听器
  • updated:页面更新后,如果想对数据作统一处理,可以在这里完成

周期----销毁阶段

卸载监视器,子组件,事件监听器

该阶段包含两个钩子函数,销毁前beforeDestroy()和销毁后Destroy()

与其说是销毁其实是卸载,卸载Vue实例上面的所有

该阶段只有调用该方法才能进入

vm.$destroy()

销毁前

打印vue实例对象,查看监视器,销毁前,监视器还是激活状态

 // 销毁前

            beforeDestroy(){

                console.log('beforeDestory');

                console.log(this);

                debugger

            }

虽然是激活状态,但是还是无法监听,我们在原有的代码基础上监听data中的num属性

 watch:{num(){console.log('监听一次');}},

当num属性值变化时,成功监听到了,当我们执行销毁时,由上得知,监听器还是在激活状态

但是以及无法监听了

销毁后

 // 销毁后

            destroyed(){

                console.log( 'Destoryed');

                console.log(this);

            }

watcher激活状态已经成了false

销毁阶段做了什么事

  1. 调用vm.$destroy()(进入销毁阶段)
  2. 调用beforeDestroy()钩子函数(此时Vue实例还在,虽然vm上的监视器、子组件、事件监听器还在,但是无法使用了,此时修改data也不会重新渲染页面了)
  3. 卸载子组件和监视器,解绑事件监听器
  4. 调用destroyed()钩子函数(此时Vue实例还在,只是空间还未释放,销毁后指的是vm对象身上所有的东西已经解绑完成)

该阶段适合做什么

beforeDestroy:适合作销毁前的准备工作

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

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

相关文章

C++:继承

一、继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

使用Microsoft Dynamics AX 2012 - 4. 销售和配送

销售和分销的主要职责是为客户提供您的商品和服务。为了完成这项任务&#xff0c;销售和分销需要通过分拣、运输和开具发票来处理销售订单&#xff0c;从而管理客户的材料需求。 销售和配送业务流程 在我们开始详细介绍之前&#xff0c;下面几行概述了销售和配送中的业务流程…

【IEEE独立出版 | 往届均完成检索】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)

#国际学术会议# 推荐 #广州# 【IEEE独立出版 | 往届均完成检索】2024年第四届消费电子与计算机工程国际学术会议&#xff08;ICCECE 2024&#xff09; 2024 4th International Conference on Consumer Electronics and Computer Engineering 2024年1月12-14日 | 中国广州 会…

监控摄像头连接NAS,实现监控管理一体化

嗯&#xff1f;你问干嘛要把摄像头连到NAS&#xff1f; 小马给家里安了个监控摄像头 本意是想家里有啥事也能查监控 却没想到这些监控不仅存储回放有限制 要想更多功能还是得多花钱 恰好&#xff0c;我有铁威马NAS 打开Surveillance Manager 轻松搭建网络摄像头管理系统 …

Leaflet结合Echarts实现迁徙图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

14.(vue3.x+vite)组件间通信方式之pinia

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 Pinia简介 Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。 Pinia与Vuex比较 (1)Vue2和Vue3都支持,这让我们同时使用Vue2和Vue3的小伙伴都能很快上手。 (2)pinia中只有state、getter、action,抛弃了Vu…

世微 dc-dc降压恒流 LED汽车大灯 单灯 14V5A 68W车灯驱动方案 AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、外置功率MOS管&#xff0c;适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W&#xff0c;最大电流6A。AP5191可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

windows搭建gitlab教程

1.安装gitlab 说明&#xff1a;由于公司都是windows服务器&#xff0c;这里安装以windows为例&#xff0c;先安装一个虚拟机&#xff0c;然后安装一个docker&#xff08;前提条件&#xff09; 1.1搜索镜像 docker search gitlab #搜索所有的docker search gitlab-ce-zh #搜索…

视频直播美颜SDK全面解析:美颜SDK技术对比

美颜SDK的出现&#xff0c;为直播主和用户提供了更丰富的美颜体验。 一、美颜SDK的基本原理 美颜SDK多种技术协同工作&#xff0c;使得直播画面更加细腻、自然&#xff0c;给用户带来更好的视觉感受。不同的SDK可能采用不同的算法和处理流程&#xff0c;从而产生各具特色的美…

【深度学习实验】注意力机制(三):打分函数——加性注意力模型

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制 1. 注意力权重矩阵可视化&#xff08;矩阵热图&#xff09;2. 掩码Softmax 操作3. 打分函数——加性注意力模型1. 初始化2. 前向传播3. 内部组件…

配电房智能综合监控系统

配电房智能综合监控系统是一种针对配电房环境和设备进行实时监控和管理的系统。依托电易云-智慧电力物联网&#xff0c;它集成了多种先进技术&#xff0c;如物联网、大数据、AI视频智能分析等&#xff0c;实现对配电房全方位、智能化的监控和管理。 这个系统的主要功能可能包括…

用Stable Diffusion帮助进行卡通风格渲染

用Stable Diffusion帮助进行卡通风格渲染 正常风格渲染卡通风格贴图增加涅斐尔边缘高光效果 正常风格渲染 正常的动物写实模型 卡通风格贴图 用Stable Diffusion可以帮助我们将写实贴图转化为卡通风格&#xff08;具体参数可以自己调试&#xff0c;总体上是将提示词强度和图…

Redis整数集合

前言 整数集合(intset)是集合键的底层实现之一&#xff0c;当一个集合只包含整数值元素&#xff0c;并且这个集合的元素数量不多时&#xff0c;Redis就会使用整数集合作为集合键的底层实现。 一. 整数集合的实现 1.1 结构 整数集合(intset)是Redis用于保存整数值的集合抽象数据…

【漏洞复现】DPTech VPN存在任意文件读取漏洞

漏洞描述 DPtech是在网络、安全及应用交付领域集研发、生产、销售于一体的高科技企业。DPtech VPN智能安全网关是迪普科技面向广域互联应用场景推出的专业安全网关产品&#xff0c;集成了IPSec、SSL、L2TP、GRE等多种VPN技术&#xff0c;支持国密算法&#xff0c;实现分支机构…

redis的性能管理、主从复制和哨兵模式

一、redis的性能管理 redis的数据时缓存在内存中的 查看系统内存情况 info memory used_memory:853688 redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统申请的内存 used_memory_peak:853688 redis使用内存的峰值 系统巡检&#xff1a;硬件巡检、数据库 n…

el-input限制输入整数等分析

文章目录 前言1、在 Vue 中&#xff0c;可以使用以下几种方式来限制 el-input 只能输入整数1.1 设置input 的 type为number1.2 使用inputmode1.3 使用自定义指令1.4 使用计算属性1.5 使用 onafterpaste ,onkeyup1.6 el-input-number 的precision属性 总结 前言 input 限制输入…

wvp分享视频访问页面

先登录查看视频 输入用户名密码登录 国标设备--点击通道 点击播放 点击复制 打开分享链接查看视频 直接在浏览器中打开 可以直接预览 原有标签退出登录 刷新分享的视频链接依然可以查看视频 iframe内嵌网页查看视频 获取iframe代码 点击复制 打开vscode&#xff0c;新建一…

有哪些好用的CFD软件?怎么选?

ANSYS Fluent和COMSOL Multiphysics以及OpenFOAM这3款CFD软件哪个好&#xff1f;cfd软件中哪款最实用&#xff1f;cfd软件有哪些&#xff1f;今天就给大家带来这几款CFD软件对比分析&#xff0c;一起来看看吧。 ANSYS Fluent ANSYS Fluent 是一种流行的计算流体动力学 (CFD) …

<MySQL> 什么是JDBC?如何使用JDBC进行编程?

目录 一、JDBC是什么&#xff1f; 二、JDBC常用接口和类 2.1 DataSource 2.2 Connection 2.3 Statement 2.4 ResultSet 三、JDBC的使用 3.1 获得数据库驱动包 3.2 添加到项目依赖 3.3 描述数据库服务器 3.4 建立数据库连接 3.6 执行SQL语句和接收返回数据 3.7 释放…