Vue2的生命周期(详解)

news2025/4/19 11:51:47

Vue的生命周期

  • 一、生命周期的概念
  • 二、钩子函数
  • 三、Vue2的生命周期
    • 3.1 初始化阶段
    • 3.2 挂载阶段
    • 3.3 更新阶段
    • 3.4 销毁阶段

一、生命周期的概念

Vue实例的生命周期: 从创建到销毁的整个过程

在这里插入图片描述

二、钩子函数

Vue框架内置函数,随着组件的生命周期阶段,自动执行

  • 作用:特定的时间点,执行特定的操作
  • 分类:四大阶段 八大方法
    在这里插入图片描述
    在这里插入图片描述

三、Vue2的生命周期

3.1 初始化阶段

  1. new Vue() – Vue实例化(组件也是一个小的Vue实例)
  2. Init Events & Lifecycle – 初始化事件和生命周期函数
  3. beforeCreate – 生命周期钩子函数被执行(data和methods初始化之前)
  4. Init injections&reactivity – Vue内部添加data和methods等
  5. created – 生命周期钩子函数被执行, 实例创建(不能获取真实的DOM)
  6. 接下来是编译模板阶段 –开始分析
  7. Has el option? – 是否有el选项 – 检查要挂到哪里
    没有. 调用$mount()方法
    有, 继续检查template选项
    在这里插入图片描述
<template>
    <div>
        <p>学习生命周期 - 看控制台的打印</p>
        <p id="mp">{{ msg }}</p>
    </div>
</template>

<script>
export default {
    //第一阶段 初始化
    //new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
    beforeCreate() {
        console.log('1.beforeCreate--执行')
        console.log('msg', this.msg); //undefined
    },
    //data和methods初始化以后  不能获取真实的DOM
    //场景:网络请求,注册全局事件,绑定页面滚动事件
    created() {
        console.log('2.created--执行');
        console.log('msg', this.msg); //hello word
    },
    data() {
        return {
            msg: 'hello word',
        }
    }
}
</script>

3.2 挂载阶段

  1. template选项检查
    有 - 编译template返回render渲染函数
    无 – 编译el选项对应标签作为template(要渲染的模板)
  2. 虚拟DOM挂载成真实DOM之前
  3. beforeMount – 生命周期钩子函数被执行
  4. Create … – 把虚拟DOM和渲染的数据一并挂到真实DOM上
  5. 真实DOM挂载完毕
  6. mounted – 生命周期钩子函数被执行
    在这里插入图片描述
<template>
    <div>
        <p>学习生命周期 - 看控制台的打印</p>
        <p id="mp">{{ msg }}</p>
        <ul id="uls">
            <li v-for="item in arr">{{ item }}</li>
        </ul>
    </div>
</template>

<script>
export default {
    //第一阶段 初始化
    //new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
    beforeCreate() {
        console.log('1.beforeCreate--执行')
        console.log('msg', this.msg); //undefined
    },
    //data和methods初始化以后  不能获取真实的DOM
    //场景:网络请求,注册全局事件,绑定页面滚动事件
    created() {
        console.log('2.created--执行');
        console.log('msg', this.msg); //hello word
    },

    //第二阶段 挂载阶段
    //真实DOM挂载之前
    //场景 预处理data,不会触发updated钩子函数
    beforeMount() {
        console.log('3.beforeMount--执行');
        console.log(document.querySelector('#mp')) //null
        this.msg = '重新改变了'
    },
    //真实DOM挂载之后
    //获取挂载后的真实DOM
    mounted() {
        console.log('4.mounted--执行');
        console.log(document.querySelector('#mp')) //p

    },
    data() {
        return {
            msg: 'hello word',
            arr: [2, 6, 4, 2, 1],
        }
    }
}
</script>

3.3 更新阶段

  1. 当data里数据改变, 更新DOM之前
  2. beforeUpdate – 生命周期钩子函数被执行
  3. Virtual DOM…… – 虚拟DOM重新渲染, 打补丁到真实DOM
  4. updated – 生命周期钩子函数被执行
  5. 当有data数据改变 – 重复这个循环
    在这里插入图片描述
<template>
    <div>
        <p>学习生命周期 - 看控制台的打印</p>
        <p id="mp">{{ msg }}</p>
        <ul id="uls">
            <li v-for="item in arr">{{ item }}</li>
        </ul>
        <button @click="arr.push(1000)">往数组加值</button>
    </div>
</template>

<script>
export default {
    //第一阶段 初始化
    //new Vue以后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
    beforeCreate() {
        console.log('1.beforeCreate--执行')
        console.log('msg', this.msg); //undefined
    },
    //data和methods初始化以后  不能获取真实的DOM
    //场景:网络请求,注册全局事件,绑定页面滚动事件
    created() {
        console.log('2.created--执行');
        console.log('msg', this.msg); //hello word
    },

    //第二阶段 挂载阶段
    //真实DOM挂载之前
    //场景 预处理data,不会触发updated钩子函数
    beforeMount() {
        console.log('3.beforeMount--执行');
        console.log(document.querySelector('#mp')) //null
        this.msg = '重新改变了'
    },
    //真实DOM挂载之后
    //获取挂载后的真实DOM
    mounted() {
        console.log('4.mounted--执行');
        console.log(document.querySelector('#mp')) //p
    },
    
    //第三阶段 更新阶段
    //更新之前
    beforeUpdate() {
        console.log('beforeUpdate--执行');
        console.log(document.querySelectorAll('#uls>li'))
        //点击button按钮  往数组追加一条数据
        console.log(document.querySelectorAll('#uls>li')[5]) //undefined
    },
    //更新之后
    // 场景:获取更新后的真实DOM
    updated() {
        console.log('updated--执行了');
        console.log(document.querySelectorAll('#uls>li')[5]) //li
    },
    data() {
        return {
            msg: 'hello word',
            arr: [2, 6, 4, 2, 1],
        }
    }
}
</script>

<style scoped></style>

3.4 销毁阶段

  1. 当$destroy()被调用 – 比如组件DOM被移除(例v-if)
  2. beforeDestroy – 生命周期钩子函数被执行
  3. 拆卸数据监视器、子组件和事件侦听器
  4. 实例销毁后, 最后触发一个钩子函数
  5. destroyed – 生命周期钩子函数被执行
    在这里插入图片描述

父组件

<div>
    <h1>1.生命周期</h1>
    <Lifes v-if="isShow"></Lifes>
    <button @click="isShow = false">销毁组件</button>
  </div>

子组件

<template>
    <div>
        <p>学习生命周期 - 看控制台的打印</p>
        <p id="mp">{{ msg }}</p>
        <ul id="uls">
            <li v-for="item in arr">{{ item }}</li>
        </ul>
    </div>
</template>

<script>
export default {
 	created() {
 	//创建一个定时器
        this.timer = setInterval(() => {
            console.log('定时器');
        }, 1000)
    },

    //第四阶段 销毁阶段
    //前提:v-if="false"  销毁Vue实例
    //场景:移除全局的事件 移除当前组件的计时器  定时器 eventBus移除事件$off方法
    beforeDestroy() {
        console.log('beforeDestroy--执行');
        clearInterval(this.timer) //销毁定时器
    },

    destroyed() {
        console.log('destroy--执行');
    },
    data() {
        return {
            msg: 'hello word',
            timer: null,//保存计时器
        }
    }
}
</script>

<style scoped></style>

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

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

相关文章

Unity Lighting -- 向场景中添加光源

本节笔记来实践向场景中添加光源。 除了平行光源外&#xff0c;还有两种常用的光源&#xff1a; 点光源&#xff08;Point Lights&#xff09;&#xff1a;点光源所发出的光是朝四面八方发散的&#xff0c;我们可以用点光源来模拟灯泡之类的发光物体。 聚光灯源&#xff08;Spo…

python每日学9 : windows上配置gitee的远程仓库,git的初步使用

在开发中&#xff0c;如果遇到复杂的项目&#xff0c;使用版本控制是非常有必要的&#xff0c;如果涉及到多端开发&#xff0c;那么还需要使用远程仓库。本文作个简单记录&#xff0c;记录下git初步使用。 1 下载与安装 git还有几个ui版本&#xff0c;但是开始使用的话&#…

【LeetCode】带环链表两道题

第一题&#xff1a;环形链表 问题介绍 给你一个链表的头节点head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数pos 来表示链表…

【Storm】【三】Storm 核心概念详解

Storm 核心概念详解 一、Storm核心概念1.1 Topologies&#xff08;拓扑&#xff09;1.2 Streams&#xff08;流&#xff09;1.3 Spouts1.4 Bolts1.5 Stream groupings&#xff08;分组策略&#xff09;二、Storm架构详解2.1 nimbus进程2.2 supervisor进程2.3 zookeeper的作用2.…

【蒸滴C】C语言结构体入门?看这一篇就够了

目录 一、结构体的定义 二、结构的声明 例子 三、 结构成员的类型 结构体变量的定义和初始化 1.声明类型的同时定义变量p1 2.直接定义结构体变量p2 3.初始化&#xff1a;定义变量的同时赋初值。 4.结构体变量的定义放在结构体的声明之后 5.结构体嵌套初始化 6.结构体…

24节气-惊蛰 // 诗句、海报分享,春风至,惊雷动。

惊蛰&#xff0c;古称"启蛰"&#xff0c;是二十四节气中的第3个节气&#xff0c;更是干支历卯月的起始;时间点在公历3月5-6日之间&#xff0c;太阳到达黄经345时。《月令七十二候集解》:"二月节……万物出乎震&#xff0c;震为雷&#xff0c;故曰惊蛰&#xff0…

【ONE·C || 动态内存管理】

总言 C语言&#xff1a;动态内存管理介绍。 文章目录总言1、为什么存在动态内存管理2、动态内存函数介绍2.1、malloc、free2.1.1、malloc函数2.1.2、free函数2.2、calloc、realloc2.2.1、calloc函数2.2.2、realloc函数3、常见的动态内存错误3.1、对NULL指针的解引用操作3.2、对…

TEX:显示文本

文章目录字体选择字体fontspec宏包根据字体形状控制字体为不同的字体形状选择不同的特征为不同的字体大小状选择不同的特征中文字体选择xeCJK宏包字体选择与设置XELATEX字体名查找字体集与符号居中与缩进居中单边调整两边缩进诗歌缩进列表itemize样例enumerate样例description样…

Java多线程(三)——线程池及定时器

线程池就是一个可以复用线程的技术。前面三种多线程方法就是在用户发起一个线程请求就创建一个新线程来处理&#xff0c;下次新任务来了又要创建新线程&#xff0c;而创建新线程的开销是很大的&#xff0c;这样会严重影响系统的性能。线程池就相当于预先创建好几个线程&#xf…

concrt140.dll丢失四种方法解决丨提示游戏里找不到concrt140.dll?

电脑提示concrt140.dll文件丢失怎么办&#xff1f;由于找不到concrt140.dll&#xff0c;无法继续执行代码&#xff1f; 我们平时在打开 Adobe 应用程序、Halo、Forza Horizon 5 地平线5 等时&#xff0c;可能会遇到找不到 concrt140.dll。因此&#xff0c;这不是特定于某个应用…

基频的后处理

基频归一化 基频为什么要归一化&#xff1f;为了消除人际随机差异&#xff0c;提取恒定参数&#xff0c;在语际变异中找到共性。 引言 声调的主要载体就是基频。但是对声调的感知会因人而异&#xff0c;例如某个听感上的高升调&#xff0c;不同的调查人员可能会分别描写成 […

Nginx的负载均衡

Nginx不仅可以作为一个web服务器或反向代理服务器&#xff0c;还可以按照权重、轮询、ip_hash、URL_hash等多种方式实现对后端服务器的负载均衡。 负载均衡的概念&#xff1a; 负载均衡就是将负载分摊到多个操作单元上执行&#xff0c;从而提高服务的可用性和相应速度&#xf…

数据仓库、数据中台、数据湖都是什么?

相信很多人都在最近的招聘市场上看到过招聘要求里提到了数据仓库、数据中台&#xff0c;甚至还有数据湖&#xff0c;这些层出不穷的概念让人困扰。今天我就来跟大家讲一讲数据仓库、数据中台以及数据湖的概念及区别。 数据库 在了解数据仓库、数据中台以及数据湖之前&#xff…

JDBC

JDBC核心技术 讲师&#xff1a;宋红康 微博&#xff1a;尚硅谷-宋红康 第1章&#xff1a;JDBC概述 1.1 数据的持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内…

【java web篇】Tomcat的基本使用

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

ceph介绍、原理、架构、算法...个人学习记录

前言 之前公司安排出差支援非结构化项目&#xff0c;采用springcloud(redismysql数据冷热处理)s3escephkafka还涉及一些区块链技术等等…&#xff0c;在与大佬的沟通交流下对ceph产生了兴趣&#xff0c;私下学习记录一下&#xff1b;后续工作之余会采用上面相关技术栈手动实现不…

Python模块化编程_Python编程之路

之前跟大家讲的是一些python的数据基础&#xff0c;从这篇文章开始&#xff0c;我们开始正式学习python的模块化编程 下面我们解释一下什么叫做模块 之前已经讲过怎么去定义一个方法&#xff0c;如果你是用python交互器(自带交互器&#xff0c;或者是ipython)来学习定义方法的…

4 通道 3.2GSPS(2 通道 6.4GSPS) 12 位 AD 采集子卡模块

FMC134 是一款 4 通道 3.2GSPS&#xff08;或者配置成 2 通道 6.4GSPS&#xff09; 采样率的 12 位 AD 采集 FMC子卡模块&#xff0c;该板卡为 FMC标准&#xff0c;符 合 VITA57.4 规范&#xff0c;可以作为一个理想的 IO 模块耦合至 FPGA 前端&#xff0c; 射频模拟信号数字化…

c语言经典例题-循环结构程序设计

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 求各位数字之积&#xff1a; 本关任务&#xff1a;计算正整数num的各位上的数字之积。 例如&#xff1a; 输入&am…

Elasticsearch:构建自动补全功能 - Autocomplete

什么是自动补全&#xff08;autocomplete&#xff09;功能呢&#xff1f;我们举一个很常见的例子。 每当你去谷歌并开始打字时&#xff0c;就会出现一个下拉列表&#xff0c;其中列出了建议。 这些建议与查询相关并帮助用户完成查询。 Autocomplete 正如维基百科所说的&#xf…