Vue学习:vue生命周期

news2025/9/14 16:22:08

Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。生命周期又称为生命周期回调函数,生命周期函数,生命周期钩子。

在Vue的整个生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册js方法,可以让我们用自己注册的js方法控制整个大局,在这些事件响应方法中的this直接指向的是vue的实例。

测试页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
    </style>
    <script src="./js/vue.global.js"></script>
</head>

<body>
    <div id="box">
        <h1>{{name}}</h1>
    </div>
    <script type="text/javascript" >
        const {createApp} = Vue
        var app = createApp({
            data(){
                return {
                    name:'zhangsan',
                }
            },
        }).mount("#box");
    </script>
</body>
</html>

 

3.1. beforeCreate

在组件实例初始化完成之后立即调用。

会在实例初始化完成、props 解析之后、data()computed 等选项处理之前立即调用。也就是在这个生命周期中,我们无法获取到data的数据,methods的函数,以及挂载的dom元素

 

beforeCreate() {
 console.log(this.name);
 console.log(">>>>>beforeCreate>>>>>");
}

3.2 created

在组件实例处理完所有与状态相关的选项后调用。

当这个钩子被调用时,以下内容已经设置完成:响应式数据、计算属性、方法和侦听器。然而,此时挂载阶段还未开始,因此 $el 属性仍不可用。

created(){
console.log(this.name);
console.log(">>>>>create>>>>>");
}

 我们可以在这个created生命周期,通过发送ajax请求,请求后台数据,进行数据的初始化

 

3.3 beforeMount

在组件被挂载之前调用。

当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。

注意:

  1. 页面呈现的是未经过Vue编译的DOM结构

  2. 所有对DOM的操作,最终都不凑效

  3. 获取不到真实DOM元素

beforeMount() {
console.log( document.querySelector("h1"));
console.log(">>>>beforeMount>>>>");
}

 

3.4 mounted

在组件被挂载之后调用。

组件在以下情况下被视为已挂载:

  • 所有同步子组件都已经被挂载。(不包含异步组件或 <Suspense> 树内的组件)

  • 其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。

这个钩子通常用于执行需要访问组件所渲染的 DOM 树相关的副作用,或是在服务端渲染应用中用于确保 DOM 相关代码仅在客户端被调用。

注意:

  1. 页面中呈现的是经过vue编译的DOM(真实DOM)

  2. 可以获取到真实DOM元素

  3. 对DOM的操作均有效(尽可能避免).至此初始化过程结束,一般在此进行,开启定时器,发送网络请求,订阅消息,绑定自定义事件等初始化操作

mounted() {
console.log( document.querySelector("h1"));
console.log(">>>>mounted>>>>>");
}

 

 

3.5 beforeUpdate

在组件即将因为一个响应式状态变更而更新其 DOM 树之前调用。

注意:

此时数据是新的,但页面是旧的

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
</style>
<script src="./js/vue.global.js"></script>
</head>
<body>
<div id="box">
   <h1>{{name}}</h1>
   <button @click="changeName()">修改</button>
</div>
<script type="text/javascript" >
   const {createApp} = Vue
   var app = createApp({
       data(){
           return {
               name:'zhangsan',
           }
       },
       methods:{
           changeName(){
               this.name="lisi";
           }
       },
       beforeUpdate() {
           console.log("页面name值:",document.querySelector("h1").innerText);
           console.log("data中name值:",this.name);
           console.log(">>>>beforeUpdate>>>");
       },
   }).mount("#box");
</script>   
</body>
</html>

 

3.6 updated

在组件因为一个响应式状态变更而更新其 DOM 树之后调用。

注意:

此时数据是新的,但页面是新的

updated() {
console.log("页面name值:",document.querySelector("h1").innerText);
console.log("data中name值:",this.name);
console.log(">>>>updated>>>");
},

 

 

3.7 beforeUnmount

在一个组件实例被卸载之前调用。当这个钩子被调用时,组件实例依然还保有全部的功能。

注意:

此时,app实例中所有的data,methods,指令等等,都处于可用状态,马上要执行销毁过程,一般在此阶段,关闭定时器,取消订阅消息,解绑自定义事件等收尾操作

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
</style>
<script src="./js/vue.global.js"></script>
</head>
<body>
<div id="box">
   <h1>{{name}}</h1>
   <button @click="changeName()">修改</button>
   <hello v-if="isShow"></hello>
   <button @click="destroy">点我销毁</button>
</div>
<script type="text/javascript" >
   const {createApp} = Vue
   //自定义一个hello组件
   const hello = {
       data(){
           return {
               hello:'你好'
           }
       },
       template:`<h2>{{hello}}</h2>`,
       beforeUnmount() {
           console.log(this.hello);
           console.log(">>>>>beforeUnmount>>>>>");
       },
   }
   var app = createApp({
       components:{
           //注册组件
           hello:hello,
       },
       data(){
           return {
               name:'zhangsan',
               isShow:true,
           }
       },
       methods:{
           changeName(){
               this.name="lisi";
              
           },
           destroy(){
               console.log("hello组件销毁中...");
               this.isShow = false;
           }
       },
   }).mount("#box");
</script>  
</body>
</html>

 

3.8 unmounted

在一个组件实例被卸载之后调用。

一个组件在以下情况下被视为已卸载:

  • 其所有子组件都已经被卸载。

  • 所有相关的响应式作用 (渲染作用以及 setup() 时创建的计算属性和侦听器) 都已经停止。

unmounted() {
	console.log(">>>>>unmounted>>>>>");
}

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

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

相关文章

水果叠叠乐

水果叠叠乐 介绍 消消乐是一款益智类小游戏&#xff0c;最近比较火爆的一种是立体叠叠乐式的&#xff0c;然后小蓝也想开发一个自己练练手&#xff0c;给它起名叫“水果叠叠乐”。 准备 本题已经内置了初始代码&#xff0c;打开实验环境&#xff0c;目录结构如下&#xff1…

OSPF高级配置——学习OSPF路由协议的高级应用

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.路由重分发及配置 1.路由重分发概述 2.理解路由重分发 3.路…

【HMS Core】华为分析SDK如何申请数据导出功能?

1、问题描述 项目中集成了华为分析SDK&#xff0c;现在有一个需求&#xff0c;想要申请数据导出功能&#xff0c;申请页面提示数据导出功能目前仅对部分邀请伙伴开放&#xff0c;需要通过在线提单的方式申请开通此功能&#xff0c;那么具体该如何操作呢&#xff1f; 2、解决方…

校园跑腿微信小程序,校园跑腿小程序,微信小程序跑腿系统毕设作品

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统&#xff0c;前台用户使用小程序发布跑腿任何和接跑腿任务&#xff0c;后台管理使用基于PHPMySql的B/S架构&#xff1b;通过后台管理跑腿的用户、查看跑腿信息和对应订单。 意义…

C++ Reference: Standard C++ Library reference: C Library: cwchar: wcstoll

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwchar/wcstoll/ 函数 <cwchar> wcstoll long long int strtoll (const wchar_t* str, wchar_t** endptr, int base); 将宽字符串转换为long long整数 解析C宽字符串str&#xff0c;将其内容解释为指定base的…

高级FPGA设计结构实现和优化_(六)静态时序分析

高级FPGA设计结构实现和优化_静态时序分析标准分析锁存器组合反馈标准分析 静态时序分析(STA)指的是在一个设计中与一组约束有关的所有时序路径的综合性分析&#xff0c;为了确定一个设计是否是“时序一致的”。由FPGA设计者遇到的基本路径是输入到触发器、触发器到触发器、触发…

MySQL进阶一 一条select语句的执行流程

文章目录前言MySQL的执行流程第一步&#xff1a;连接器第二步&#xff1a;查询缓存第三步&#xff1a;解析SQL第四步&#xff1a;执行 SQL预处理器优化器执行器主键索引查询全表扫描索引下推总结前言 有一位同志问我为什么很久没更新了&#xff0c;因为前一个礼拜在复盘JavaSE…

【详解】手撕 一维、二维、三维差分数组原理(附图解,模板,例题分析)

【差分专题】 引言 ​ 差分是一种处理数据巧妙而简单的方法&#xff0c;可以应用于区间修改和询问问题。例如&#xff0c;将给定的数据集合 A 分成很多区间&#xff0c;并对这些区间进行很多次操作&#xff0c;每次都是对某段区间内的所有元素做相同的加减操作&#xff0c;此…

YOLOv7学习笔记(一)——概述+环境+训练

一、环境安装测试 1、创建环境conda create -n yolo python3.7conda activate yolo2、安装pytorchconda install pytorch torchvision cudatoolkit11.3 -c pytorch11.3为cuda版本号3、克隆yolov5git clone https://github.com/WongKinYiu/yolov7 # clonecd yolov7pip install…

真的要转到云IDE了吗?VS Code的开源IDE

云IDE产品介绍 云IDE使用教程 免费使用地址&#xff1a;点击【云IDE】&#xff0c;即可开始创建工作空间啦~ 前言 CSDN最新产品【云IDE】来啦&#xff01;【云IDE】将为各位技术er一键秒级构建云开发环境&#xff0c;提升开发效率&#xff01; 1. 什么是IDE&#xff1f; 做…

PyTorch 1.13 正式发布:CUDA 升级、集成多个库、M1 芯片支持

内容导读&#xff1a;近日&#xff0c;PyTorch 团队在官方博客宣布 Pytorch 1.13 发布。本文将详细围绕新版本的 4 大亮点展开介绍。 据官方介绍&#xff0c;PyTorch 1.13 中包括了 BetterTransformer 的稳定版&#xff0c;且不再支持 CUDA 10.2 及 11.3&#xff0c;并完成了向…

大数据项目之电商数仓、业务数据介绍、业务数据模拟、生成业务数据、业务数据建模

文章目录6. 业务数据介绍6.5 业务数据模拟6.5.1 连接MySQL6.5.2 建表语句6.5.3 生成业务数据6.5.3.1 在hadoop102的/opt/module/目录下创建db_log文件夹6.5.3.2 把gmall2020-mock-db-2021-11-14.jar和application.properties上传到hadoop102的/opt/module/db_log路径上6.5.3.3 …

[CSS]常见布局技巧

前言 系列文章目录&#xff1a; [目录]HTML CSS JS 根据视频和PPT整理视频及对应资料&#xff1a;HTML CSS 老师笔记&#xff1a; https://gitee.com/xiaoqiang001/html_css_material.git视频&#xff1a;黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3…

榛子树搜索算法(Hazelnut tree search algorithm,HTS)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

c++基础(十四)——继承

一、继承的基本语法 继承是面向对象三大特性之一&#xff0c;有些类与类之间存在特殊的关系&#xff0c;当定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码。 基本语法&…

HotStuff:基于高效 BFT-SMR 共识的区块链

参考资料&#xff1a; Yin M, Malkhi D, Reiter M K, et al. HotStuff: BFT consensus in the lens of blockchain[J]. arXiv preprint arXiv:1803.05069, 2018.Michael J. Fischer, Nancy A. Lynch, and Mike Paterson. Impossibility of distributed consensus with one fau…

为什么网络安全缺口很大,而招聘却很少?

2020年我国网络空间安全人才数量缺口超过了140万&#xff0c;就业人数却只有10多万&#xff0c;缺口高达了93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&#xff1…

Spring-security流程讲解01:basic模式

1&#xff1a;有basic模式认证&#xff1a; 1.0Maven依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version> </parent…

UGUI DrawCall的优化 工作记录

优化前&#xff1a; UGUI DrawCall调用256次 优化原则&#xff1a; 不追求极致&#xff0c;差不多就行了主要优化 静态不动的节点&#xff0c;避免改变脚本 优化思路&#xff1a; 3. 对现有的图集进行微调 4. 处理图文混排 打断合批的问题&#xff0c;微调节点的父子关系和节…

图解LeetCode——754. 到达终点数字(难度:中等)

一、题目 在一根无限长的数轴上&#xff0c;你站在 0 的位置。终点在 target 的位置。 你可以做一些数量的移动 numMoves : 每次你可以选择向左或向右移动。第 i 次移动&#xff08;从 i 1 开始&#xff0c;到 i numMoves &#xff09;&#xff0c;在选择的方向上走 i 步。…