Vue生命周期详解学习笔记

news2024/11/27 8:23:52

生命周期

  1. 生命周期又名生命周期回调函数,生命周期函数,生命周期钩子。
  2. 生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。
  3. 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
  4. 生命周期中的this指向vm或组件实例对象。

钩子函数

钩子函数用来描述Vue实例从创建到销毁整个生命周期。
在这里插入图片描述

八大钩子数分别是:

beforeCreate,created,beforeMount,mounted(挂载),beforeUpdate,updated(更新),beforeDestory,destoryed(销毁)

实例创建

            beforeCreate() {
                console.log('beforeCreate')
                console.log(this);//vm

            },
            created() {
                console.log('created')
            },
  • beforeCreate前的init:初始化:生命周期、事件,但数据代理还未开始
    data:{n:1},vm._data和vm.n都不存在。
  • beforeCreate:此时,无法通过vm访问到data中的数据、methods中的方法。
     beforeCreate() {
                  console.log('beforeCreate')
                  console.log(this);//vm
                  debugger;//只分析到这里代码停到这里
              },
    
  • beforeCreate之后的init:数据监测,数据代理。
  • created:此时,可以通过vm访问到data中的数据,methods中配置的方法。

页面挂载

 beforeMount() {
                console.log('beforeMount');
                console.log(this);//vm
                // debugger;//只分析到这里代码停到这里

            },
            // vue完成模板的解析并把初始的真实DOM元素放入页面后(挂载完毕)调用mounted
            mounted() {
                console.log('mounted', this.$el instanceof HTMLElement)//mounted 是真实dom
            },
  • 下一阶段,Vue开始解析模板,生成虚拟DOM(内存中),页面还不能显示解析好的内容。
    有el选项,无template选项,解析el的外部html做为模板,检测div是否属于模板,可以给div绑定:x=“n”,可以通过查看是否解析来看。
    在这里插入图片描述

无el选项,当vm.$mounted(el)被调用,检测是否有template选项,进入下一步。
有el选项,有template选项,解析template进入渲染函数
在这里插入图片描述

将html内容放入单引号不换行不报错,或者换行将单引号换成反引号,就不会报错。

在这里插入图片描述

根据报错的提示,一个template只能有一个根元素,所以需要将内容用div包裹.这样就不报错了,但是这样的话div的root类名就不存在了。

  • beforeMount页面呈现的是未经Vue编译的DOM结构;所有对DOM的操作,最终都不奏效。
    beforeMount() {
                  console.log('beforeMount');
                  console.log(this);//vm
                  debugger;//只分析到这里代码停到这里
              },
    
    如果没有debugger断点,控制台都不会显示操作DOM的结果。
  • 将内存中的虚拟DOM转为真实DOM插入页面(将vm$el替换el)
  • mounted:此时页面中呈现的是经过Vue编译的DOM,对Dom操作均有效(尽可能避免)。至此初始化过程结束,一般在此进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件、等初始化操作。

数据更新

beforeUpdate() {
                console.log('beforeUpdate')
                console.log(this.n)
                // debugger;
            },
            updated() {
                console.log('updated')
                console.log(this.n)
                // debugger;
            },
  • mounted挂载后,当数据发生改变会先调用beforeUpdate,此时,数据是新的,页面是旧的。页面尚未和数据保持同步。根据新数据,生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面更新,即:完成了Model->View的更新,更新完后,页面和数据保持同步,数据是新的,页面也是新的。

实例销毁

            beforeDestroy() {
                console.log('beforeDestroy')
            },
            destroyed() {
                console.log('destroyed')
            },
  • 当vm.$destroy()调用时,beforeDestroy:此时,vm中所有的:data、methods、指令等等,都处于可用状态,马上要执行销毁过程,一般在此阶段:关闭定时器,取消订阅消息,解绑自定义事件等收尾操作。

  • vm.$destroy()完全销毁一个实例,清理它与其它组件实例的连接,解绑它的全部指令及事件监听器(自定义事件)。
    在这里插入图片描述

    console.log是原生的do事件不是自定义事件所以销毁后还是存在的

总结

常用的生命周期钩子:

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

关于销毁Vue实例

  1. 销毁后借助Vue开发者工具看不到任何信息。
  2. 销毁后自定义事件会失效,但原生DOM事件依然有效。
  3. 一般不会再beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了。

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

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

相关文章

【PHP面试题48】Redis的事务?事务都有哪些注意的地方?

文章目录 一、关于事务1.1 事务的概念和优势1.2 Redis事务的基本用法 二、Redis事务的注意事项2.1 使用WATCH监视关键变量2.2 避免长时间事务2.3 避免事务中的循环2.4 处理事务执行结果2.5 考虑使用管道2.6 使用合适的事务隔离级别2.7 考虑事务的并发性2.8 监控事务执行情况 总…

项目管理进度管理神器:有效方法分享

在项目管理中,进度管理是至关重要的环节,它可以帮助项目团队及时发现和解决问题,确保项目按计划顺利进行。一个有效的进度管理方案需要考虑多方面的因素,包括任务分解、时间控制、资源分配、风险管理等。 如何有效的管理项目进度&…

剑指 Offer 68 - II. 二叉树的最近公共祖先

题目介绍 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…

FL Studio2023最新中文版混音编曲宿主软件及电脑配置要求

现在大部分音乐的制作过程都是在宿主软件中完成的,宿主软件又称数字音频工作站,简写为DAW软件。目前市面上有非常多的宿主软件供大家选择,例如Cubase、Logic Pro以及我一直使用的FL Studio。每款不同的宿主软件都有不同的优缺点,所…

MFC第十七天 CFont类与LOGFONT结构体、记事本文件打开和保存及是否保存的逻辑流程分析、PreTranslateMessage虚函数与快捷键

文章目录 CFont类与LOGFONT结构体CFontDialog字体信息结构体与HFONT句柄的关系 记事本文件拖入、打开和保存及是否保存的逻辑流程分析PreTranslateMessage虚函数与快捷键附录 CFont类与LOGFONT结构体 CFontDialog 构造函数介绍 public: //用于指定字体对话框的初始字体属性&…

C# Modbus通信从入门到精通(4)——Modbus RTU(0x02功能码)

1、02(0x02)读线圈输入 使用该功能码能从远程地址中读取1到2000个输入线圈的状态,每个线圈的状态只能是0或者1,读取的线圈数量由主站读取时指定。 2、发送报文格式 更详细的格式如下: 从站地址+功能码+起始地址高位+起始地址低位+线圈数量高位+线圈数量低位+CRC,一共8个…

Linux进程理解【程序地址空间】

Linux进程理解【程序地址空间】 文章目录 Linux进程理解【程序地址空间】1. 话题引入2. 进程地址空间2.1 虚拟地址2.2 写时拷贝 3. 知识扩展 我们先来看看C/C程序地址空间的分布图 如此多区域的划分是为了更好的使用和管理空间,但是真实的内存空间也是按照图上的地址…

nginx的下载与安装

https://nginx.org/en/download.html 下载地址(我下载的是1.20.2) 1、首先保证可以连接外网 2、将包拖入opt/nginx 3、安装gcc环境 (如果出现问题可以参考https://www.cnblogs.com/lzxianren/p/4254059.html) yum -y install gc…

你还在手动对比代码差异?这些高质量工具太香了

B站|公众号:啥都会一点的研究生 我发现相当一部分初学者(甚至搬砖多年的老同志)在对比文件差异的时候居然还是 观察法 文本内容少还凑活能用,成百上千行的时候把眼睛累坏了不说,关键还容易漏信息 接触的人与事多了会…

volatile的可见性探讨

我跟volatile修饰对象和数组能保证其内部元素的可见性?一文的作者有类似的疑惑,按语义,volatile修饰数组时,只是保证其引用地址的可见性,可为什么给数组加了volatile之后,似乎单个数组元素也有了可见性&…

Android Glide同步阻塞方式submit获得Bitmap,kotlin

droid Glide同步阻塞方式submit获得Bitmap,kotlin 需要放入后台线程,不能在主线程。 Android Glide预加载preload ,kotlin_zhangphil的博客-CSDN博客【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了…

AC+AP 旁挂式连接配置(华为)

AR1路由器配置 # interface GigabitEthernet0/0/0 ip address 10.1.30.1 255.255.255.0 ip route-static 10.1.20.0 255.255.255.0 10.1.30.2 # LSW1核心交换机 # dhcp enable vlan batch 10 20 30 interface Vlanif20 ip address 10.1.20.1 255.255.255.0 dhcp select in…

nacos启动多个集群

nacos启动多个集群,只需要改动集群的名称,然后再次实例服务即可。

Vue3正式发布那么久了,你认识Pinia了吗?

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

一个无经验的大学毕业生,可以转行做软件测试吗?

先说答案,一个无经验的大学毕业生,可以转行做软件测试。 首先什么人会提出这个问题?应该是个大学生,而且肯定不是计算机系毕业的,甚至都不可能是一个工科生。因为哪怕是工科毕业的学生,大学期间最少也学习过C语言编程…

数据结构(王道)——栈的应用

一、括号匹配检查 思路: 算法结构: 代码实现: 算法思路总结: 二、表达式求值 中缀、后缀、前缀表达式: 中缀转后缀表达式 三、栈在递归当中的应用 递归在斐阶乘的应用 缺陷:递归层数过多的话可能会导致栈溢…

小程序MobX创建store并实现全局数据共享

查看小程序根目录中是否存在package.json文件 在项目根目录运行cmd 没有package.json文件输入npm init -y初始化一下,初始化一个包管理 安装MobX npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 小程序菜单栏工具–构建npm 根目录创建store文…

单目相机标定、图像校正、单目位姿估计、差值法检测移动物体、稠密光流法跟踪移动物体

目录 1、单目相机标定 2、图像校正 3、单目位姿估计 4、差值法检测移动物体 5、稠密光流法跟踪移动物体 1、单目相机标定 //单目相机标定 int test1() {//读取所有图像vector<Mat> imgs;string imageName;ifstream fin("F:/testMap/calibdate.txt");while(…

AtCoder Regular Contest 159

B - GCD Subtraction 题意&#xff1a; 给定两个正整数 A , B A,B A,B&#xff0c;给定一个操作&#xff1a;令 g g c d ( A , B ) ggcd(A, B) ggcd(A,B)&#xff0c;令 A A − g , B B − g AA-g, BB-g AA−g,BB−g。问最少经过多少次操作之后其中一个数变为0. 思路&…

APPScan介绍以及安装方式【附带链接】

AppScan介绍和安装 请务必下载绑定的链接&#xff0c;避免环境错误 1.简介 Appscan 10中文版是是全新网络安全漏洞扫描软件&#xff0c;软件可以直接可以对OS命令、SSRF和XXE攻击等漏洞进行检测&#xff0c;使得漏洞检测更加容易&#xff0c;提高漏洞的扫描效率。软件同时支…