vue生命周期函数原理解析,vue阻止事件冒泡方法实现

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:前端零基础,实战进阶教学
景天的主页:景天科技苑

文章目录

  • vue对象的生命周期钩子函数
    • 1.什么是生命周期钩子函数都有哪些?分别是什么意思?
    • 2.整个生命周期图解
    • 3.面试回答技巧:
  • 阻止事件冒泡

vue对象的生命周期钩子函数

生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue实例;
在创建实例过程中,需要设置数据监听,编译模板,将实例挂载到DOM上,数据更新能够让DOM也更新,在这个初始化,又会不同阶段默认调用一些函数执行,这些函数就是生命周期的钩子函数;

通俗说就是Vue实例从创建到销毁的过程,就是生命周期

1.什么是生命周期钩子函数都有哪些?分别是什么意思?

组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载,无法访问到数据和真实的dom,一般不做操作
挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,
在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情…

当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿
当更新完成后,执行updated(据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom)
经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等,组件的数据绑定、监听…去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以

2.整个生命周期图解

在这里插入图片描述

3.面试回答技巧:

总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。

创建前/后: 在beforeCreated阶段,vue实例的挂载元素el还没有。在created阶段,vue实例的数据对象data有了,el还没有.
载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完,data.message成功渲染。
更新前/后:当data变化时,会触发beforeUpdate和updated方法。
销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在

每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,
我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能。

首先了解下钩子函数
在这里插入图片描述

A类的run方法就是钩子函数,B继承A后,可以重新定义run方法逻辑
钩子函数方便拓展

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="js/vue.min.js"></script><script>window.onload = function(){//$(function(){})()  $.ready() -- window.onload = function(){}var vm = new Vue({el:"#app",data:{num:0},beforeCreate:function(){console.log("beforeCreate,vm对象尚未创建,num="+ this.num);  //undefined,就是说data属性中的值还没有放到vm对象中this.name=10; // 此时没有this对象呢,所以设置的name无效,被在创建对象的时候被覆盖为0console.log(this.$el) //undefined},created:function(){// 用的居多,一般在这里使用ajax去后端获取数据,然后交给data属性console.log("created,vm对象创建完成,设置好了要控制的元素范围,num="+this.num );  // 0 也就是说data属性中的值已经放到vm对象中this.num = 20;console.log(this.$el) //undefined},beforeMount:function(){console.log( this.$el.innerHTML ); // <p>{{num}}</p> ,vm对象已经帮我们获取到了这个视图的id对象了console.log("beforeMount,vm对象尚未把data数据显示到页面中,num="+this.num ); // 20,也就是说vm对象还没有将数据添加到我们的视图中的时候this.num = 30;},mounted:function(){// 用的居多,一般在这里使用ajax去后端获取数据然后通过js代码对页面中原来的内容进行更改 console.log( this.$el.innerHTML ); // <p>30</p>console.log("mounted,vm对象已经把data数据显示到页面中,num="+this.num); // 30,也就是说vm对象已经将数据添加到我们的视图中的时候},// 后面两个简单作为了解吧,测试的时候最好单独测试下面两个方法  更新之前触发beforeUpdate,更新之后触发 updatedbeforeUpdate:function(){// this.$el 就是我们上面的el属性了,$el表示当前vue.js所控制的元素#appconsole.log( this.$el.innerHTML );  // <p>30</p>console.log("beforeUpdate,vm对象尚未把更新后的data数据显示到页面中,num="+this.num); // beforeUpdate----31},updated:function(){console.log( this.$el.innerHTML ); // <p>31</p>console.log("updated,vm对象已经把过呢更新后的data数据显示到页面中,num=" + this.num ); // updated----31},});}</script>
</head>
<body><div id="app"><p>{{num}}</p><button @click="num++">按钮</button></div>
</body>
</html>beforeCreate和created//beforeCreat,vm对象尚未创建,data属性中的值还没有放到vm对象中  还没圈地,也没有数据属性beforeCreate() {console.log("beforeCreate=====>")console.log(this.$el)console.log(this.$data)},//created, vm对象创建完成,设置好了要控制的元素范围,data属性中的值已经放到vm对象中created() {console.log("created=====>")console.log(this.$el)console.log(this.$data)},

在这里插入图片描述

beforeCreate啥也没创建,el和data都没有。
created el也没有,data数据属性已加载到视图
在这里插入图片描述

beforeMount和mounted
在这里插入图片描述

beforeMount。数据属性还未挂载到视图,所以username取不到值
在这里插入图片描述

这些用作发请求来用,实例化vue对象加载过程中,就可以发请求。在声明周期钩子中发请求
重点记住created和mounted,将来我们在这两个方法中来发送获取数据请求

created时发送获取后端数据请求,保证data刚被加载,前端页面就获取到后端数据
mounted时,数据属性已经挂载到视图,如果此时再去后台拿数据,再数据驱动视图,去改原来的数据,效率就比较低了

如果页面要引入某些js,css效果。就要在mounted时操作

在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。

另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created

阻止事件冒泡

vue中也存在事件冒泡
在这里插入图片描述

当点击父标签,只弹出父标签弹窗
当点击子标签,先弹出子标签弹窗,再弹出父标签弹窗,此之谓事件冒泡
在这里插入图片描述

阻止事件冒泡,使用.stop和.prevent

<div id="app"><div class="c1" @click="f1">
<!--        阻止事件冒泡,方式一,@click.stop-->
<!--        <div class="c2" @click.stop="f2">--><!--        阻止事件冒泡,方式二,@click.stop.prevent--><div class="c2" @click.stop.prevent="f2"></div></div></div><!--    阻止标签默认动作 @click.stop.prevent=""--><a href="http://www.baidu.com" @click.stop.prevent="">百度</a>

此时再点击。页面不跳转
在这里插入图片描述

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

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

相关文章

TransNeXt实战:使用TransNeXt实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2311.17132.pdf TransNeXt是一种视觉骨干网络&#xff0c;它集成了聚合注意力作为令牌混合器和卷积GLU作为通道混合器。通过图像分类、目标检测和分割任务…

Hive借助java反射解决User-agent编码乱码问题

一、需求背景 在截取到浏览器user-agent&#xff0c;并想保存入数据库中&#xff0c;经查询发现展示的为编码后的结果。 现需要经过url解码过程&#xff0c;将解码后的结果保存进数据库&#xff0c;那么有几种实现方式。 二、问题解决 1、百度&#xff1a;url在线解码工具 …

【gpt实践】比OpenAI 的 GPT-4 更好模型 Claude 3.0

Google 最近发布了最新的 Gemini 1.5 语言模型&#xff0c;震惊了世界。这是目前功能最强大的模型&#xff0c;拥有 100 万个上下文窗口&#xff0c;是所有大型基础模型中最大的。 OpenAI 的 GPT-4 才具有 128K 上下文窗口。 最近&#xff0c;谷歌最接近的竞争对手之一 Anthro…

记忆化搜索

记忆化搜索 怎么优化&#xff1f;这里为什么要用引用呢?记忆化搜索的含义记忆化搜索的框架1) 合法性剪枝2)偏序关系剪枝3)记忆化剪枝4)递归计算结果并返回 今天每日一题可以用dp做&#xff0c;但是看答案有人用记忆化搜索&#xff0c;以前也经常听到这个名词&#xff0c;so今天…

2024/3/14打卡棋子(14届蓝桥杯)——差分

标准差分模板 差分——前缀和的逆运算&#xff08;一维二维&#xff09;-CSDN博客 题目 小蓝拥有 nn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。 小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0…

Android Button点击事件

一.Button点击事件 <!-- activity_main.xml --> <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools"…

C++ //练习 10.34 使用reverse_iterator逆序打印一个vector。

C Primer&#xff08;第5版&#xff09; 练习 10.34 练习 10.34 使用reverse_iterator逆序打印一个vector。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**************************************************************…

Apollo:如何打造全球化的医疗AI,轻量级,重量级

Apollo&#xff1a;如何打造全球化的医疗AI&#xff0c;轻量级&#xff0c;重量级 提出背景将多种语言的医学数据混合使用时&#xff0c;这些数据是互相帮助&#xff08;互补&#xff09;还是互相冲突的&#xff1f;训练训练小型模型的初衷训练方法训练设置 效果代理调优&#…

Python实现一个简单的主机-路由器结构(计算机网络)

说明 本系统模拟实现了一个路由器与两个主机节点。该路由器将接收原始以太网帧&#xff0c;并像真正的路由器一样处理它们&#xff1a;将它们转发到正确的传出接口&#xff0c;处理以太网帧&#xff0c;处理 IPv4 分组&#xff0c;处理 ARP分组&#xff0c;处理 ICMP 分组&…

沉浸式感受旧时光,VR全景让游客都爱上老街区打卡地

近年来&#xff0c;随着城市建设的推进&#xff0c;很多老建筑以及周边的道路都发生了很大的变化&#xff0c;为了让更多的游客可以领略城市发展的进程以及旧时的人文风情&#xff0c;很多城市都会通过实地场景拍摄制作VR全景&#xff0c;将老街区、老建筑的真实场景进行虚拟再…

新型masked勒索病毒袭击工控行业

2019年10月9号总部设在荷兰海牙的欧洲刑警组织与国际刑警组织共同发布报告《2019互联网有组织犯罪威胁评估》&#xff0c;报告指出数据已成为网络犯罪分子的主机攻击目标&#xff0c;勒索软件仍是网络安全最大威胁&#xff0c;全球各界需要加强合作&#xff0c;联合打击网络犯罪…

【Vue3】路由的query参数和params参数

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Python数据分析-pandas3

1.pandas的作用&#xff1a; numpy能够帮助我们处理数值&#xff0c;但是pandas除了处理数值之外&#xff08;基于numpy&#xff09;&#xff0c;还能够帮助我们处理其他类型的数据。 2.pandas之Series创建&#xff1a; 3.pandas之Series切片和索引 4.缺失值处理 5.常用的统计…

【C语言刷题】——初识位操作符

【C语言刷题】——初识位操作符 位操作符介绍题一、 不创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换&#xff08;1&#xff09;法一&#xff08;2&#xff09;法二 题二、 求一个数存储在内存中的二进制中“一”的个数&#xff08;1&#xff0…

phpcms上传漏洞

原始漏洞 漏洞原理&#xff1a;我们上传一个zip的压缩包&#xff0c;它会解压然后删除其中不是.jpg .gig .png的文件 function check_dir($dir)&#xff1a;这是一个PHP函数的定义&#xff0c;它接受一个参数 $dir&#xff0c;代表要检查的目录路径。 $handle opendir($dir)…

【React】Vite创建React+TS项目

前提条件 有node环境&#xff0c;且node版本>18.0.0 创建项目 npm create vitelatest1.起项目名 2.选择框架 3.选择语言 TypeScript SWC 是指 Vite 使用 SWC&#xff08;Speedy Web Compiler&#xff09;作为 TypeScript 的编译器。 SWC 是一个针对 JavaScript 和 Ty…

客服销冠偷偷用的提效神器!无广很实用

近期发现我的同事每天上班必登录的一款软件——客服宝聊天助手&#xff0c;用过才发现&#xff1a;真客服办公的提效神器&#xff01;感兴趣的小伙伴请往下看~一、客服宝的简介&#xff1a;客服宝聊天助手&#xff0c;是一款跨平台快捷回复工具。自带多种功能&#xff0c;有效帮…

Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时&#xff0c;接口的请求方法有get,post等&#xff1b;get和post请求传参&#xff0c;和获取接口响应数据的方法&#xff1b; 请求接口为Post时&#xff0c;传参方法 我们在使用python中requests库做接口测试时&#xff0c;在做post接口测试…

C语言练习题【复试准备】

1、BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi&#xff0c;转换以下ASCII码为对应字符并输出他们。 //73,32,99,97,110,32,100,111,32,105,116,33 int main() {int arr[] {73,32,99,97,110,32,100,111,32,105,116,33};int i …

备战2024年汉字小达人活动:历年区级样题练习和解析(续)

今天我们继续来看汉字小达人活动的区级样题。区级样题是中文自修杂志社&#xff08;主办方&#xff09;发布的试题&#xff0c;主要是给学校老师选拔参考使用的&#xff0c;据了解&#xff0c;很多学校老师是直接用这个样卷在学校组织选拔&#xff0c;选拔成绩突出的同学报给主…