第三十四篇 生命周期 - 易理解

news2024/11/24 0:16:39

         通过之前一系列内容的推进来到生命周期的内容了,那么对于生命周期图示这块内容原文档内容有这么一段话:You don’t need to fully understand everything going on right now, but as you learn and build more, it will be a useful reference.;什么意思呢?它是不需要你立马弄明白生命周期图示里面的所有内容,而是通过不断的一个学习和使用后才会有参考的价值!下面可以简单的来看一下图示(附中文版本图示);

         生命周期就有这么八个,分为四组,分别是 beforeCreate(创建之前)、created(创建完成),beforeMount(挂载之前)、mounted(挂载完成),beforeUpdate(更新之前)、updated(更新完成),beforeDestory(销毁之前)、Destoryed(销毁完成);在生命周期当中并不是每一个都很常用,也就那么几个,但是依然需要去了解关注事件在什么时候触发的,为什么会在这个地方触发而不是在其他地方,也即是它触发的时机;下面就简单的来了解一下为后续的内容做基础;

生命周期

<div id="app"></div>
<script>
new Vue({
    el:'#app',
    data:{
        author:'lhxz'
    },
    methods:{},
    // 生命周期与data,methods平级
    // beforeCreate 创建之前
    beforeCreate(){
        console.log("beforeCreate",this.author);
    },
    // created 创建完成
    created(){
        console.log("created","初始化",this.author);
    },
    // beforeMounted 挂载之前
    beforeMount(){
        console.log("beforeMount","DOM挂载之前");
    },
    // mounted 挂载完成
    mounted(){
        console.log("mounted","DOM挂载完成了,访问DOM","做事件监听,发ajax请求,设置定时器");
    },
    // beforeUpdate 更新之前
    beforeUpdate(){
        console.log("beforeUpdate","更新之前");
    },
    // updated 更新完成
    updated(){
        console.log("updated","更新完成");
        console.log("updated","获取更新完成之后的DOM,依赖DOM操作的库,需要知道状态更新完,什么时候DOM更新");
    },
    // beforeDestory 卸载之前
    beforeDestory(){
        console.log("beforeDestory","卸载前");
    },
    // Destory 卸载完成
    Destory(){
        console.log("Destory","卸载完成");
    }
})
</script>

        可以知道的是在控制会打印出前四个的内容;后面四个都尚未被触发;

         从控制台打印的内容来看以及结合图示,在 beforeCreate 创建之前去打印 data 中定义的author,输出结果是一个undefined,可以看到在 beforeCreate 创建之前 Vue实例刚在内存当中创建出来,并未初始化好 data 和 methods ;到 created 创建完成,此时实例已经在内存当中创建完成了,此时的 data 和methods 已经初始化完成,能够打印出data中的author,但还没有开始编译模板;到befortMount 挂载之前,此时已经完成了模板的编译,但还没有挂载到页面上去;当到mounted 挂载完成之时,DOM的挂载也就完成了,可以访问DOM,能够挂载到页面指定的容器当中,可以做一些事件监听,发ajax请求,设置定时器等之类的操作;

        前面我们是通过点击来进行一个axios请求,现在可以直接在mounted()当中去发起axios的请求,这里可以将之前的fetch和axios请求的东西在mounted中去进行测试一下,那么这里就以axios的这篇内容进行,附上地址: 第二十篇 axios使用

测试:与data和methods平级编写以下代码(这里的数据源自之前axios中模拟的数据)

mounted(){
        axios.get("fetch.json")
            .then(res=>{
                console.log(res);
            })
    }

 测试效果:

        在挂载完成时进行数据请求渲染在页面;ps: 进入网站时就会自动的去请求数据渲染在页面上,不需要像之前一样通过点击按钮发起请求获取数据在渲染在页面当中;


        那么后面的两组先来第一组继续操作,也就是 beforeUpdate 和 updated ;为了能够更加直观下面来单独编写:

        beforeupdate 更新之前,这时data当中的数据时最新的,但是在页面当中显示的数据依然时未更新之前的数据(旧数据),因为此时并未开始进行对DOM节点进行渲染;

        updated 更新完成,此时data当中的数据已经完成了对DOM节点的一个渲染,data 和页面当中的数据都是最新的。

思路:通过点击按钮更改data中author的数据,然后在beforeUpdate更新之前 和 在updated更新完成 这两个生命周期进行对data数据和DOM节点进行打印;

测试代码编写:

<div id="app">
    <p>{{author}}</p>
    <button @click="handleChange">更新data数据</button>
</div>
<script>
new Vue({
    el:'#app',
    data:{
        author:'lhxz'
    },
    methods:{
        handleChange(){
            this.author = 'LHXZ';
        }
    },
    beforeUpdate(){
        console.log("更新之前,data数据是最新的:",this.author,"DOM节点是旧数据");
        var app = document.getElementById('app');
        console.log(app.innerHTML);
    },
    updated(){
        console.log("更新完成(已挂载到页面)",this.author,"data和DOM节点都是新数据");
        var app = document.getElementById('app');
        console.log(app.innerHTML);
    }
})
</script>

测试效果:

 点击 "更新data数据" 后

        跟预期的一样在更新之前的data数据是最新的而DOM节点的数据是未更新之前的旧数据;更新完成的data数据和DOM节点数据都是最新的数据。


        最后一组 beforeDestory 销毁之前 和 Destoryed 销毁完成,还记得第一篇内容讲到v-if和v-show的区别吗?在讲 v-if 的时候说 v-if 是通过销毁和创建来进行显示和隐藏的吗?下面我们通过一个组件,使用 v-if 来测试:

        通过销毁的方式,可以看到<child>组件已经没有了,已然被 "抹杀"了;那么在beforeDestory 销毁之前进行实例的调用仍然是可以用的,一旦销毁完成之后则 destoryed 所有的东西都会被解绑,所有监听器也会被移除掉,所有的子实例也会被销毁!

        以上就是生命周期的内容,简单的了解知道生命周期的一个内容,然后在后续的不断使用和学习就能够慢慢的知道生命周期!这也为了后续的内容讲解铺垫!感谢大家的支持!

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

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

相关文章

jenkins构建gitee项目

流程是代码提交到gitee&#xff0c;jenkins中点击构建&#xff0c;自动删除目标服务器之前运行的jar包、拉取代码、构建、将jar包传到目标服务器、运行jar包。 1.下载jenkins运行 java -jar jenkins.war --httpPort8084 然后根据初始密码&#xff0c;创建账号&#xff0c;下载…

同花顺_代码解析_技术指标_P、Q

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 PBX PRICEOSC PSY PSYFS PVT QACD QLCX QLDX PBX 瀑布线 PBX1:(收盘价的M1日移动平均收盘价的M1*2日简单移动平均收盘价的M1*4日简单移动平均)/3 PBX2:(收盘价的M2日移动平均收…

320力扣周赛总结

目录 一、三元组数目 二、二叉树最近结点查询 三、到达首都的最少油耗 四、完美分割的方案数 一、三元组数目 6241. 数组中不等三元组的数目https://leetcode.cn/problems/number-of-unequal-triplets-in-array/ 思路&#xff1a;数据范围都非常小&#xff0c;三重循环即可…

Linux下的的GDB调试技巧一 —— 基础知识和介绍

基础知识 BUG BUG是一个英文单词&#xff0c;本意是指昆虫、小虫、损坏、犯贫、缺陷、窃听器等意思。在本文中是计算机领域专业术语&#xff0c;一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题&#xff0c;简称程序漏洞。另外bug还有一种引申意义&a…

MySQL表的增删改查操作(CRUD)

1. 新增1.1 插入一行全列插入1.2 插入多行指定列插入2. 查询2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 起个别名 as2.5 去重 distinct2.6 排序 order by2.7 条件查询 where2.8 分页查询 limit3. 修改 update4. 删除 delete增删查改(CRUD)即:增加(Create)、查询(Retri…

STC51单片机34——五线四相步进电机驱动(1个步进电机)

/*-------------------------------------------------------------------------------- MCU: STC15W408AS 注意其没有T1&#xff0c;但是有T2 开发板: STC15W408AS最小系统板 晶振: 内部时钟11.0592M&#xff0c;波特率3…

JavaScript面向对象:面向过程与面向对象

面向对象编程介绍 两大编程思想 面向过程 面向对象 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 举个栗子&#xff1a;…

STM32 CRC计算单元(循环冗余校验)

STM32第三篇【1】STM32 CRC计算单元【2】STM32 CRC简介【3】STM32 CRC主要特性【4】STM32 CRC功能描述【5】STM32 CRC寄存器【6】STM32 数据寄存器&#xff08;CRC_DR&#xff09;【7】STM32 独立数据寄存器&#xff08;CRC_IDR&#xff09;【8】STM32 控制寄存器&#xff08;C…

数字化转型模块设计

基于了解到现状及问题&#xff0c;设计部门提出如下的业务需求&#xff1a; 创建三维通用模型仓库&#xff1a; 在Windchill创建相应的存储库及文件夹&#xff0c;分别存储不同类型的通用模型&#xff0c;例如标准件、通用件、外购件等等&#xff1b;对于存储库及文件夹针对所…

k8s 资源管理

文章目录1. 资源管理介绍2. 资源管理方式2.1 命令式对象管理Kubectl 命令资源对象类型子命令输出格式namespace / pod的创建和删除演示2.2 命令式对象配置2.3 声明式对象配置3. kubectl 可以在 node 节点上运行吗&#xff1f;4. 使用推荐&#xff1a;三种方式应该怎么用&#x…

【王道计算机网络笔记】计算机网络体系结构-计算机网络体系结构与参考模型

文章目录计算机网络分层结构OSI参考模型TCP/IP参考模型5层参考模型5层参考模型的数据封装与解封装计算机网络分层结构 我们把计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之&#xff0c;计算机网络的体系结构就是这个计算机网络及其所应完成的功能的…

Hash表实现原理

Hash表查找的本质就是&#xff1a;在创建记录表的时候&#xff0c;确定记录的key与其存储地址之间的关系f&#xff0c;当要查找keyk的记录时&#xff0c;通过关系 f 就可得到相应记录的地址而获取记录&#xff0c;从而免去了key的比较过程 我们把这个关系 f 称为Hash 函数&…

1.3 字符编码

文章目录1. 编码2. ASCII 字符集3. 字符编码发展4. Unicode 字符集5. 字符编码5.1 UTF-165.3 UTF-325.3 UTF-86. 文件编码转换7. 乱码问题1. 编码 计算机只能识别高低电平, 将高低电平用数字表示: 0表示低电压, 1表示高电平. 于是就创造出来二进制数, 一个二进制有 0 和 1, 两…

【网络工程】5、路由器介绍及配置实操

接上篇《4、企业级交换机配置》 之前我们通过eNSP完成了一个企业级交换机的配置实例&#xff0c;本篇我们继续来讲解网络设备——路由器的介绍&#xff0c;以及完成路由器的相关配置实操。 当我们申请了一条宽带后&#xff0c;一般都需要一台路由器来进行上网&#xff0c;那么…

SpringBoot项目创建及其核心设计思想

参考了很多相关博客: springboot怎么学&#xff1f; - 知乎 如何解读springboot 中约定大于配置、JPA是什么、咋用_打豆豆。的博客-CSDN博客 SpringBoot约定大于配置到底是什么意思&#xff1f;_zhupanlinch的博客-CSDN博客 SpringBoot约定大于配置的特性解读 & SpringBoot…

胶囊网络深入理解

胶囊网络的概念与理解 胶囊网络概述 人工神经元不应当追求神经元活动中的视角不变性&#xff0c;&#xff08;使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动&#xff09;。而应当使用局部的胶囊&#xff0c;这些胶囊对其输入执行一些相当复杂的内部计算。然…

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类&#xff0c;用来描述时间&#xff0c;使用无参构造创建的对象默认表示系统的当前时间&#xff0c;使用有参构造&#xff08;指定的毫秒值&#xff09;表示从时间原点&#xff08;1970年&#xff09;过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式&#xff1a; Ethernet封包格式 TCP封包格式&#xff1a; ICMP封包格式&#xff1a;ping 知识点2【数据包的分析】 案例&#xff1a;网络分析器&#xff1a; 知识点2【混杂模式】接受数据&#xff08;了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲&#xff1a;线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…