(十八)Vue之生命周期

news2025/2/1 22:58:21

文章目录

  • 引出生命周期
    • 外部的定时器实现
    • 生命周期实现
  • 生命周期详解
    • 挂载流程
    • 更新流程
    • 销毁流程
    • 总结

Vue学习目录

上一篇:(十七)Vue之自定义指令

引出生命周期

先看一个需求:一上来就让一段文字的透明度循环从1-0-1的过程,效果是让一段文字逐渐透明直到透明的为0,为0时把透明度设置为1继续逐渐透明。

外部的定时器实现

<!-- 准备好一个容器-->
<div id="root">
    <h2 :style="{opacity}">欢迎学习Vue</h2>
</div>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        },
	})
	setInterval(()=>{
        vm.opacity -= 0.01
        if (vm.opacity <= 0){
            vm.opacity = 1
        }
    },20)

通过外部的定时器实现(不推荐)
弊端:在实际开发中实例Vue是不会收到一个vm的,

  • 一来是占用内存,影响效率。
  • 二来一般对属性的修改都在Vue里面配置,想要在外面修改一般都是借助Vue.的形式设置。

生命周期实现

通过外部的定时器实现是不推荐,然而在内部修改属性,以我们的知识只能借助计算属性和methods配置,这两个配置都需要在模板里面使用才会生效,我们的需求是一上来就让其运行。

  • methods配置需要事件触发才能实现需求,违背需求。
  • 计算属性配置需要在模板里面使用,但是这样会开启很多个定时器,虽然能实现需求,但是这样会导致定时器溢出。
  • 并且这两种方法都没有做关闭定时器这个动作。

综上所述,我们只能借助生命周期实现。
生命周期:
又名:生命周期回调函数、生命周期函数、生命周期钩子。
Vue在关键时刻帮我们调用的一些特殊名称的函数。
生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
生命周期函数中的this指向是vm 或 组件实例对象。

<div id="root">
    <h2 :style="{opacity}">欢迎学习Vue</h2>
    <button @click="stop">点我停止变换</button>
</div>
new Vue({
        el:'#root',
        data:{
            opacity:1
        },
        methods:{
            stop(){
                //clearInterval(this.timer)
                this.$destroy()
            }
        },
        mounted(){
            this.timer = setInterval(() => {
                console.log('setInterval')
                this.opacity -= 0.01
                if(this.opacity <= 0) this.opacity = 1
            },20)
        },
        beforeDestroy() {
            clearInterval(this.timer)
        }
    })

生命周期详解

在这里插入图片描述

挂载流程

  • 1 初始化生命周期和事件,但这时数据代理还未开始。
  • 2 在初始化数据之前,调用beforeCreate钩子函数,此时无法访问到data的数据和methods中的方法
  • 3 初始化数据监测和数据代理
  • 4 创建完毕,调用created钩子函数,此时可以访问到data的数据和methods中的方法
  • 5 是否有el配置项
    • 5.1 有el配置项,走template配置项判断流程
    • 5.2 没有el配置项,监测什么时候调用$mount(el),调用则走template配置项判断流程
  • 6 判断是否有 template配置项
    • 6.1 有template配置项,编译template并将函数绑定
    • 6.2 没有template配置项,编译el所绑定的模板
  • 7 将要挂载,调用beforeMount钩子函数,此时页面呈现未经Vue编译的DOM结构,所有对DOM的操作都无效
  • 8 将内存中的虚拟DOM转换成真实DOM插入页面。
  • 9 挂载完毕(重要),调用mounted函数函数,此时页面的是经过Vue编译的DOM,对DOM的操作均有效,但是要尽可能避免,至此初始化过程结束,一般在此过程进行:开启定时器、发送网络请求等初始化操作

更新流程

  • 1 监测data数据什么时候改变
  • 2 一旦data改变,将要更新,调用beforeUpdate钩子函数,此时数据是最新的,但是页面数据是旧的
  • 3 根据新的数据生成新的虚拟DOM,通过diff算法与旧的DOM进行比较,最终完成更新
  • 4 更新完毕,调用updated钩子函数,此时数据是最新的,页面也是最新的

注意:更新流程是循环的,即更新完,会进行监测data数据,一旦改变,就继续走更新流程,直到Vue走销毁流程。

销毁流程

  • 1 监测什么时候调用$destroy()
  • 2 将要销毁(重要),调用beforeDestroy钩子函数,此时Vue中的所有都处于可用状态,马上要执行销毁过程,一般在此时进行:关闭定时器、取消订阅消息等等收尾的操作
  • 3 对Vue中所有的东西都进行销毁
  • 4 销毁完毕,调用destroyed钩子函数,此时Vue中的所有东西都已经销毁,不可用

总结

挂载流程,更新流程、销毁流程

挂载流程

  • 将要创建:调用beforeCreate函数
  • 创建完毕:调用created函数
  • 将要挂载:调用beforeMount函数
  • 挂载完毕(重要):调用mounted函数

更新流程

  • 将要更新:调用beforeUpdate函数
  • 更新完毕:调用updated函数

销毁流程

  • 将要销毁(重要):调用beforeDestroy函数
  • 销毁完毕:调用destroyed函数

常用的生命周期钩子:

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

关于销毁Vue实例

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

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

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

相关文章

Fabric.js 文本自动换行的实现方式

本文简介 点赞 关注 收藏 学会了 在 fabric.js 提供的文本组件中&#xff0c;默认状态是不会自动换行。如果你的使用场景中需要自动文本自动换行&#xff0c;可以使用 Textbox &#xff0c;并将 splitByGrapheme 设置为 true 即可。 文本自动换行 如果需要实现本文自动换行…

盘点:保护企业数据安全的10种方法

即便是大型企业也无法防止网络攻击导致的数据泄露&#xff0c;但有多种保护数据安全的方法。 许多公司谨慎处理敏感信息&#xff0c;包括客户个人信息、企业财务记录和账户&#xff0c;以及企业暂时不想泄露的绝密项目&#xff0c;保持数据的安全至关重要。 全球知名企业发生了…

Java(十五)----Stream流

1 Stream流 1.1 Stream流的优势 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提…

11 深入了解InnoDB引擎

1. Innodb逻辑存储结构 表空间&#xff1a;ibd文件段segment&#xff1a;区extent&#xff1a;一个区大小为1m&#xff0c;里面有64个page页&#xff1b;为了保证页的连续性innodb会一次从磁盘申请4-5个区页page&#xff1a;一个page页大小为默认为16k行row&#xff1a;Trx id、…

深入探究Python上下文管理器

引子 上下文管理器是一种简化代码的有力方式&#xff0c;其内部也蕴含了很多Python的编程思想&#xff0c;今天我们就来探究一下Python的上下文管理器。 大家之前都知道&#xff0c;使用Python打开文件的时候最好要使用with语句&#xff0c;因为这样就算在文件操作中出现了异常…

基于java的校园共享自行车系统的设计与实现/校园共享单车管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…

React扩展:setState、lazyLoad、hook

目录 1.setState的两种写法 ①setState(对象,[callback])②setState(函数,[callback])函数可以接收到stata和props&#xff0c;callback回调函数能获取状态更新后的数据 写了个Demo组件 import React, { Component } from reactexport default class Demo extends Component…

万岳直播电商系统源码代码分析

以小编经验来看&#xff0c;传统商户领域的客流量受地区的限制&#xff0c;往往比较单一、固定&#xff0c;商家需压耗费大量的时间进行打造IP&#xff0c;而电商直播系统的出现则完全打破了这一规则&#xff0c;商家可以通过直播的形式&#xff0c;轻松获取源源不断的客流量&a…

网络中的一些基本概念(总结)

目录 1.IP地址 2.端口号 3.协议 4.五元组 5.协议分层 1.OSI七层模型 2.TCP/IP五层(四层)模型 6.网络分层对应 7.封装 8.分用 9.客户端和服务器 1.IP地址 IP地址是用来定位主机的网络地址,主要用于标识主机和一些其他的网络设备,比如路由器通常是用点分十进制来表示的]…

节律失调:Theta-Gamma耦合精度改变损害老年人的联想记忆

根据著名的神经通信理论&#xff0c;振荡活动的精确协调能够形成联想记忆。我们认为&#xff0c;正常的认知老化会损害神经通信的时间精确性&#xff0c;从而损害联想记忆的形成。我们发现&#xff0c;在年轻人和老年人中都存在高频gamma功率与低频theta相位的耦合支持联想记忆…

地下水监测系统介绍 地下水水位在线监测系统解决方案及应用

平升电子地下水监测系统/地下水水位在线监测系统解决方案由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和…

神奇的 Excel 插件:Azure DevOps 插件

我想离开测试部分,与您分享一个插件,我发现它在我作为业务分析师的商业生活中非常有用。如果您与 Azure DevOps Board 擦肩而过,本文适合您:) 本周,我将与您分享一个我用来跟踪在 Azure DevOps 中完成的工作的插件。 在解释它的安装和使用之前,我想分享一下为什么我需要…

【Lilishop商城】No3-11.模块详细设计,促销模块(优惠券、满减、秒杀、积分)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…

skynet开发一个猜数字游戏

skynet开发一个猜数字游戏游戏简介接口设计和实现agent服务接口room服务接口hall服务接口redis服务gate服务接口编写skynet的config文件游戏演示总结后言游戏简介 猜数字游戏目的是掌握 actor 模型开发思路。 规则&#xff1a; 满三个人开始游戏&#xff0c;游戏开始后不能退…

1.初识Node.js

由于浏览器中有Javascript解析引擎&#xff0c;所以写的javascript可以在浏览器中执行&#xff0c;不同的浏览器有不同的JS解析引擎。由于浏览器内置了DOM,BOM,AJAX这种API&#xff0c;所以JS才能使用他们。 Node.js和浏览器都可以为JS提供运行环境&#xff0c;可以使用Node.j…

【Python机器学习】神经网络中误差反向传播(BP)算法详解及代码示例(图文解释 附源码)

需要全部代码请点赞关注收藏后评论留言私信~~~ 误差反向传播学习算法 用神经网络来完成机器学习任务&#xff0c;先要设计好网络结构S&#xff0c;然后用训练样本去学习网络中的连接系数和阈值系数&#xff0c;即网络参数S&#xff0c;最后才能用来对测试样本进行预测。 在研…

智能驾驶进入新周期:从「定点量产」到「做大做强」

智能驾驶赛道已经进入一个全新的周期。 过去三年时间&#xff0c;中国本土供应商陆续进入乘用车前装量产赛道&#xff0c;部分企业实现了从0到1的量产突围&#xff0c;而一些领跑的本土供应商已率先进入规模化上车的新阶段。 从最初的技术突破、产品落地&#xff0c;到定点量…

干货 | IC模拟版图设计学习笔记,一文教你快速入门

模拟版图设计处于IC设计流程的后端&#xff0c;属于模拟IC设计岗位的一种。随着我国半导体行业的发展&#xff0c;IC模拟版图岗位的人才需求也越来越大。而每个芯片最终能够付诸于生产都离不开集成电路版图设计师的功劳&#xff0c;所以IC模拟版图工程师在芯片产业的发展过程中…

Nginx-反向代理

什么是反向代理 用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理 如何配置反向代理 修改nginx配置文件 1.切换到nginx的conf路径下操作nginx的配置文件 cd /usr/local/openresty/nginx/conf 1.1防止修改错误可以先备份一下配置文件 cp nginx.…

IO流2.0 缓冲流 序列化 字符打印 printf格式 压缩流

04 缓冲流Buffered 4.1字节缓冲流 4.2 字符缓冲流 newLine();在底层自动识别操作系统类别和换行符 其实就是输出换行符; 4.2.1 BufferedReader&#xff08;字符为单位 尽量用于文本文件&#xff09; 不要去操作 二进制文件[声音&#xff0c;视频 ], 可能造成文件损坏 throw…