第14集丨Vue2 基础教程 —— 生命周期

news2025/1/22 8:46:15

目录

  • 一、引子
    • 1.1 实现一
    • 1.2 一个死循环的写法
    • 1.3 mounted实现
  • 二、生命周期
    • 2.1 概念
    • 2.2 常用的生命周期钩子
    • 2.3 关于销毁Vue实例注意点
    • 2.4 vm的一生(vm的生命周期)
    • 2.5 生命周期图示

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。比如 created 钩子可以用来在一个实例被创建之后执行代码。也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mountedupdateddestroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

一、引子

需求:实现我爱南京透明度(opacity)由10循环渐变。

1.1 实现一

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        }
    })
    setInterval(() => {
        vm.opacity -= 0.01;
        if(vm.opacity<=0) vm.opacity=1;
    }, 20);
</script>

1.2 一个死循环的写法

下面案例中,定时器里面做了一件事就是:修改了opacity。但是,由于Vue一旦发现opacity被修改了,就会从新解析模板,从而change()方法又会被重新调用,就导致了死循环。

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
    {{change()}}
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        },
        methods: {
            change(){
                console.log("开了个定时器");
                setInterval(() => {
                    this.opacity -= 0.01;
                    if(this.opacity<=0) this.opacity=1;
                },20);
            }
        },
    })
</script>

1.3 mounted实现

mounted:什么时候被调用?Vue完成模板的解析,并把初始的真实的DOM元素放入页面(挂载完毕)后调用。只调用一次。里面的this就是vm实例对象。

下面案例中,只会打印一次:mounted挂载成功!

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        },
        mounted() {
            console.log("mounted挂载成功!");
            setInterval(() => {
                this.opacity -= 0.01;
                if(this.opacity<=0) this.opacity=1;
            },20);
        }
    })
 
</script>

二、生命周期

2.1 概念

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

2.2 常用的生命周期钩子

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

2.3 关于销毁Vue实例注意点

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

2.4 vm的一生(vm的生命周期)

  • 将要创建===>调用beforeCreate()函数。
  • 创建完毕===>调用created()函数。
  • 将要挂载===>调用beforeMount()函数。
  • 挂载完毕(重要的钩子)===>调用mounted()函数。
  • 将要更新===>调用beforeUpdate()函数。
  • 新完毕===>调用updated()函数
  • 将要销毁(重要的钩子===>调用beforeDestroy()函数。
  • 销毁完毕===>调用destroyed()函数。

2.5 生命周期图示

下图展示了vm实例的生命周期,涉及到8个(4组)函数:

  • beforeCreate():无法通过vm访问到data中的数据、methods中的方法。
  • created():可以访问到data中的数据、methods中的配置方法。
  • beforeMount():页面呈现的是未经编译的DOM结构。所有对DOM的操作,最终都不奏效。
  • mounted():页面中呈现的是经过Vue编译的DOM;对DOM的操作均有效(尽可能避免)。至此,初始化过程结束,一般在此进行开启定时器、发送网络请求、订阅消息、绑定自定义事件、等初始化操作。
  • beforeUpdate():此时数据是新的,但页面是旧的,即,页面尚未和数据保持同步。
  • updated():此时数据是新的,页面也是新的,即,页面和数据保持同步。
  • beforeDestroy():此时vm中所有的datamethods、指令等等,都处于可用状态,马上要执行销毁过程。一般在此阶段:关闭定时器、取消订阅消息、解绑自定义事件等收尾操作。
  • destroyed()

在这里插入图片描述

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

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

相关文章

如何能够写出带货的爆文?

网络推广这个领域&#xff0c;公司众多价格差别很大&#xff0c;就拿软文文案这块来讲&#xff0c;有人报价几十块&#xff0c;也有人报价几千块。作为企业的营销负责人往往会被价格吸引&#xff0c;比价择优选用&#xff0c;结果写出来的文案不满意&#xff0c;修改也无从入手…

vs2019 vs2022默认以管理员身份运行

找到快捷方式属性&#xff0c;点高级&#xff0c;把“用管理员身份运行”打勾再确定&#xff0c;之前是有个兼容性选项卡的&#xff0c;在没有选项卡的情况下就用这种方法

【【STM32-USART串口协议】】

STM32-USART串口协议 USART串口协议 •通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 •通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&…

C++ 之动态链接库DLL使用注意事项及C#调用详解

C 之动态链接库DLL使用注意事项及C#调用详解 有时候算法开发完成之后需要封装成动态链接库DLL来进行集成&#xff0c;一方面增加了算法or代码的复用或者广泛使用性&#xff0c;另一方面也起了保密的效果平时封装成DLL之后放到一台新的电脑上会出现问题&#xff0c;所以本文总结…

企事业数字培训及知识库平台

前言 随着信息化的进一步推进&#xff0c;目前各行各业都在进行数字化转型&#xff0c;本人从事过医疗、政务等系统的研发&#xff0c;和客户深入交流过日常办公中“知识”的重要性&#xff0c;再加上现在倡导的互联互通、数据安全、无纸化办公等概念&#xff0c;所以无论是企业…

Gitlab-第四天-CD到k8s集群的坑

一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…

UDS (Unified Diagnostic Services)汽车诊断标准协议

作者博客主页 作者 : Eterlove 一笔一画&#xff0c;记录我的学习生活&#xff01;站在巨人的肩上Standing on Shoulders of Giants! 该文章为原创&#xff0c;转载请注明出处和作者 参考文献&#xff1a; 《道路车辆统一诊断服务(UDS) Road vehicles - Unified diagnostic s…

【Windows 常用工具系列 8 -- 修改鼠标光标(指针)大小和颜色的快速方法方法】

文章目录 修改方法 上篇文章&#xff1a;Windows 常用工具系列 7 – 禁用win10自带的微软输入法 修改方法 Win键 i 快捷键进入设置页面&#xff0c;然后输入光标... 就会跳出修改鼠标大小与光标颜色的选项。 Win键是在计算机键盘左下角Ctrl和Alt键之间的按键 根据自己的需求…

强训第32

选择 D B A A 发送TCP意思应该是已经建立了连接&#xff0c;会超时重传。在未建立连接的时候&#xff0c;会放弃该链接 C A 80端口是http A 交换机攻击主要有五种&#xff1a;VLAN跳跃攻击 生成树攻击 MAC表洪水攻击 ARP攻击 VTP攻击 B A 2^(32-26)2^(32-27)2^(32-27)128 减去…

6.3 社会工程学攻击

数据参考&#xff1a;CISP官方 目录 社会工程学攻击概念社会工程学攻击利用的人性 “弱点”典型社会工程学攻击方式社会工程学攻击防护 一、社会工程学攻击概念 什么是社会工程学攻击 也被称为 "社交工程学" 攻击利用人性弱点 (本能反应、贪婪、易于信任等) 进…

你永远想象不到有多折磨的 Android 开发 react-native gradle*!¥%#

很难过&#xff0c;拿到项目运行不起来&#xff0c;错误报告研究几天没研究明白&#xff0c;改代码&#xff0c;装gradle&#xff0c;忙和好久还是一个样&#xff0c;也不知道是码的问题还是什么&#xff0c;一开始 后面装完gradle&#xff0c;不报错了&#xff0c;但是也跑不起…

leetcode 力扣刷题哈希表初尝试

哈希表 刷题初尝试 哈希表基础知识242. 有效的字母异位词383. 赎金信49. 字母异位词分组438. 找到字符串中所有字母异位词 哈希表基础知识 哈希表是一种数据结构&#xff0c;也叫散列表。哈希表中存储的是键值对&#xff0c;即(key&#xff0c;value)&#xff0c;根据key直接查…

draw.io导出矢量图到word报错text is not svg - cannot display

先参考https://blog.csdn.net/a625750076/article/details/126384831 如果不行&#xff0c;可能是转存的问题 解决方法&#xff1a;直接在draw.io上操作 第一步 第二步 然后再word中粘贴&#xff0c;依旧是矢量图哦&#xff01;

LeetCode150道面试经典题-- 汇总区间(简单)

1.题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,…

Wi-Fi 安全在学校中的重要性

Wi-Fi 是教育机构的基础设施&#xff0c;从在线家庭作业门户到虚拟教师会议&#xff0c;应有尽有。大多数 K-12 管理员对自己的 Wi-Fi 网络的安全性充满信心&#xff0c;并认为他们现有的网络安全措施已经足够。 不幸的是&#xff0c;这种信心往往是错误的。Wi-Fi 安全虽然经常…

Excel设置某列或者某行不某行不可以编辑,只读属性

设置单元格只读的三种方式: 1、通过单元格只读按钮&#xff0c;设置为只为 设置行或者列的只读属性&#xff0c;可以设置整行或者整列只读 2、设置单元格编辑控件为标签控件(标签控件不可编辑) 3、通过锁定行&#xff0c;锁定行的修改。锁定的行与只读行的区别在于锁定的行不…

docker-compose部署nacos 2.2.3

1、编写docker-compose.yml文件 version: "3.1" services:nacos:restart: alwaysimage: nacos/nacos-server:v2.2.3container_name: nacosenvironment:- NACOS_AUTH_ENABLEtrue- MODEstandalone- NACOS_AUTH_TOKEN8b92c609089f74db3c5ee04bd7d4d89e8b92c609089f74db…

高层建筑全景vr火灾隐患排查模拟培训软件助力群众防范火灾伤害

随着城市化进程的加快&#xff0c;楼宇建筑的数量也在不断增加。然而&#xff0c;楼宇消防安全问题也日益突出。为了提高楼宇员工和居民的消防安全意识&#xff0c;楼宇VR消防安全教育培训应运而生。VR安全培训公司深圳华锐视点制作的楼宇vr消防安全教育培训&#xff0c;包括消…

初出茅庐的小李博客之STM32CubeMx配置定时器的编码器模式

STM32CubeMx配置定时器的编码器模式 上次文章写了编码器是如何工作的&#xff0c;今天就来用STM32F103C8T6的TIM3的通道1跟通道2编写一个编码器识别程序。 编程思路&#xff1a; A相:TIM3_CH1 B相:TIM3_CH2 SWITCH:PB5&#xff08;外部中断的方式&#xff09; 实现效果&a…

threejs实现水面的效果

实现水波纹的效果&#xff1a;加入几何形状&#xff0c;可以将平台的几何形状 const waterGeometry new THREE.PlaneGeometry( 10000, 10000 ); 引入水的插件&#xff0c;并修改水的材质。 import { Water } from three/addons/objects/Water.js;const water new Water(water…