前端基础面试题·第四篇——Vue(其一)

1.v-if 和 v-show的区别

在Vue中这两个命令都用于控制元素的显示与隐藏。
(1) v-if

  • 动态控制元素显示与隐藏,本质上是动态销毁或者重建元素,会触发浏览器重排与重绘。
  • 在切换状态时有一个局部编译/卸载的过程会适当重建或者销毁内部的事件监听、子组件。
  • 是真正的条件渲染,会触发组件的生命周期。
  • 可搭配v-else-if、v-else使用
  • 官方不建议其与v-for指令在同一个元素上使用,因为v-if的优先级高于v-for,可能会造成一些不必要的BUG。

(2) v-show

  • 动态控制元素显示与隐藏,本质上是控制元素的display属性,不会销毁重建元素,只会切换元素的显示状态,不会触发重排,只会触发重绘。
  • 只是简单的css属性切换。
  • 不会触发组件生命周期。

(3) 使用场景

  1. 如果需要频繁切换元素的显示状态,建议用v-show。避免频繁的操作DOM元素,减少性能开销。
  2. 如果元素需要控制元素的创建与销毁,则使用v-if。

2.v-for中的key属性

(1) key属性

  • key属性是Vue中v-for指令中使用时必须为绑定元素设置的一个属性,用于标识列表中的每个元素,从而实现列表的更新与删除。
  • 本质上vue在底层渲染时,会通过key属性来判断前后两次渲染是否是同样的元素,如果key值相同且元素type也相同就会认为元素本身前后两次没有变化,从而就只会更新元素的props和conetnt,不会销毁重重建元素,避免了多余的dom操作,减少性能消耗。
  • 在v-for中如果列表的元素需要动态操作,测最好是将key值设置为一个唯一的值,这样在渲染时就会判断更准确。

(2) 作用

  1. 提高虚拟dom的更新。
  2. 提高列表的更新与删除效率。
  3. 避免不必要的多月dom操作。

3.vue中组件的生命周期

1.主要的的生命周期

Vue组件主要生命周期示意图1.setup()函数:

  • 这个函数在Vue项目最先开始初始化时执行,在Vue3中正式被引入,并且代替了Vue2的beforeCreated()和created()。
  • 在这个函数中我们通常可以做一些变量初始化,数据请求等前置工作。

2.beforeCreate() - (vue3之后被setup函数代替):

  • beforeCreate函数是创建组件实例之前的生命周期函数,此时组件的数据和事件都还没有被初始化。

3.created() - (vue3之后被setup函数代替):

  • created函数是创建组件实例之后的生命周期函数,此时组件的数据和事件已经被初始化。
  • vue3中使用setup函数代替了beforeCreate和created函数,但如果使用optionsAPI编写Vue3项目是还是可以使用这两个生命周期,官方建议使用setup。
  • 值得注意的是vue3推荐使用组合式API,而这两个函数并为提供对应的组合式API,这也表明官方不推荐再使用这两个函数。

4.beforeMount() - onBeforeMount:

  • beforeMount函数是挂载之前执行的函数,此时组件的模板还没有被挂载到页面上。在vue3中这个函数被重命名为onBeforeMount。

5.mounted() - onMounted:

  • mounted函数是挂载之后执行的函数,此时组件的模板已经被挂载到页面上。在vue3中这个函数被重命名为onMounted。
  • 这个生命周期函数是开发中除了setup之外使用最多的,一般的数据请求等相关操作都可以在这个函数中执行。

6 .beforeUpdate() - onBeforeUpdate:

  • beforeUpdate函数是更新之前执行的函数,此时组件的数据已经更新,但模板还没有被更新。在vue3中这个函数被重命名为onBeforeUpdate。

7.updated() - onUpdated:

  • updated函数是更新之后执行的函数,此时组件的数据和模板都已经更新。在vue3中这个函数被重命名为onUpdated。

8.beforeDestroy() - onBeforeUnmount:

  • beforeDestroy函数是销毁之前执行的函数,此时组件的数据和模板都还在,但组件实例已经被销毁了。在vue3中这个函数被重命名为onBeforeUnmount。

9.destroyed() - onUnmounted:

  • destroyed函数是销毁之后执行的函数,此时组件的数据和模板都还在,但组件实例已经被销毁了。在vue3中这个函数被重命名为onUnmounted。

2. 其他特殊的生命周期函数

(1).keep-alive组件生命周期
keep-alive这个组件是一个Vue内置组件,它的作用就是用来缓存页面或者组件的。在keep-alive中使用的组件在第一次被加载之后就会被缓存下来,下一次进入或者挂载就不会再次重新创建组建了,直接复用缓存的组件。因此就会导致组件部分的生命周期函数不会被执行,从而会调用一些特殊的生命周期函数。具体如下:

  • onActivated: 这个函数只有在keep-alive组件中才会生效,即组件被缓存之后下次重新进入该组件时就会被触发(一但组件被缓存,下次进入就不会调用任何其他的生命周期函数,不包括update相关的两个),这个函数在SSR(服务端渲染)中不会被触发。
  • onDeactivated: 这个函数只有在keep-alive组件中才会生效,即组件被页面中移除时就会触发(一旦使用缓存之后,组件移除时就不会再调用其他的生命周期函数),这个函数在SSR(服务端渲染)中不会被触发。

详细解读可以参考Vue官网:Vue3

(2).组件错误处理生命周期

errorCaptured(onErrorCaptured)函数:
errorCaptured函数是当捕获一个来自子孙组件的错误时被调用的函数。

错误会从以下的来源捕获:

  • 组件渲染
  • 事件处理器
  • 生命周期钩子
  • setup
  • watch 侦听器
  • 自定义指令钩子
  • 过渡钩子

这个生命周期函数接收一个回调函数作为参数,并为回调函数传递三个参数:

  1. 错误对象
  2. 发生错误的组件实例
  3. 错误信息类型字符串(这个参数在生产环境中会有所变化)
  4. 可以在函数中返回false以阻止该错误继续向上传播。

注意: 默认情况下所有的错误都会被发送到应用级ap.config.errorHandler配置,并终止应用。
如果组件链上有多个errorCaptured钩子,则它们会以深度优先的顺序被调用。如果其中任何一个返回false,则剩下的钩子就不会被调用。这个过程就好像是原生dom事件中的事件冒泡。

(3).响应式数据更新和依赖触发生命周期
在Vue中最大的特点就是响应式数据,Vue官方提供了两个生命周期函数会在数据改变以及页面更新时来执行,方便开发者来执行一些自己的逻辑。

  • **onRenderTracked(dev only):**这个函数会在组件渲染时如果追踪到响应式对象时就会被调用,这个函数仅能在开发环境下使用,且如果使用服务器端渲染(SSR)也不会被触发。
  • **onRenderTriggered(dev only):**这个函数会在响应式对象对应的依赖被触发时调用,这时就相当于是响应式对象数据变化了并且触发了组件的更新。仅在开发环境使用。

(4).SSR专有生命周期

  • onServerPrefetch(ssr only) 这个函数会在组件在服务器端渲染时被调用,如果这个函数返回一个promise,则ssr渲染时就会等待这个promise完成之后才会渲染。

4.在created和mounted中请求数据有什么区别

(1) created
在created阶段,组件实例已经创建完成,但是组件的DOM结构还没有生成,所以无法操作DOM,但是可以访问data中的数据,这个时候请求数据相对来说比较早,对后续DOM渲染没有影响。

(2) mounted
在mounted阶段,组件实例已经创建完成,并且组件的DOM结构已经生成,可以操作DOM,这个时候请求数据相对来说比较晚,后续将数据渲染到页面上是可能会闪屏,如果请求的数据较多,对性能有一定的影响。

(3) 总结
如果说请求的数据在后续dom需要渲染或者需要较早渲染,一般在created中请求数据,如果请求的数据在后续dom不需要渲染,则可以在mounted中请求数据。

5.vue中修饰符有哪些

1. 事件修饰符

Vue 为 v-on 提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。这些修饰符可以改变事件监听器的部分性质,比如阻止默认行为,阻止事件冒泡等等。
常见的修饰符有:

修饰符描述
.stop调用 event.stopPropagation(),停止事件冒泡
.prevent调用 event.preventDefault(),阻止默认行为
.capture添加事件侦听器时使用 capture 模式
.self只当事件是从侦听器绑定的元素本身触发时才触发回调
.once事件将只会触发一次
.left(2.2.0) 只当点击鼠标左键时触发
.passive(2.3.0) 以 { passive: true } 模式添加侦听器

2. 按键修饰符

在监听键盘事件时,我们经常需要检查特定的按键。Vue 允许在 v-on 或 @ 监听按键事件时添加按键修饰符。
一般常用的键盘修饰符事件

修饰符描述
.enter按下回车键
.tab按下Tab键
.delete按下删除键(捕获“Delete”和“BackSpace”键)
.esc按下ESC键
.space按下空格键
.up按下上键
.down按下下键
.left按下左键
.right按下右键

3.系统按键修饰符

除了以上按键修饰符外,Vue 还提供了系统按键修饰符。

修饰符描述
.ctrl只有按下 Ctrl 键时触发
.alt只有按下 Alt 键时触发
.shift只有按下 Shift 键时触发
.meta只有按下 Meta(Windows徽标) 键时触发

这些修饰符即可以和鼠标事件一起使用,也可以和键盘事件一起使用。
在mac电脑上,meta键是command键,windows徽标键是window键。

<!-- Alt + Enter -->
<input @keyup.alt.enter="clear" /><!-- Ctrl + 点击 -->
<div @click.ctrl="doSomething">Do something</div>

.exact 修饰符​
.exact 修饰符允许精确控制触发事件所需的系统修饰符的组合。

<!-- 当按下 Ctrl 时,即使同时按下 Alt 或 Shift 也会触发 -->
<button @click.ctrl="onClick">A</button><!-- 仅当按下 Ctrl 且未按任何其他键时才会触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button><!-- 仅当没有按下任何系统按键时触发 -->
<button @click.exact="onClick">A</button>

4. 鼠标按钮修饰符

鼠标按钮修饰符只能用于鼠标事件。

修饰符描述
.left左键
.right右键
.middle中键
<!-- 仅当点击鼠标左键时触发 -->
<button @click.left="onClick">A</button>

5. v-model修饰符

v-model 指令的默认行为是当用户输入时将输入的值同步到数据中,但有时我们可能想要在每次 input 事件触发后进行一些操作,这时可以使用一些修饰符来实现。

修饰符描述
.lazy将 input 事件转变为 change 事件
.number将用户输入自动转为数值类型,如果输入值潍无法被parseFloat解析,就会返回原值,且在输入框设置为type="number“ 时自动使用
.trim自动过滤用户输入的首尾空格

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

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

相关文章

数据结构与算法实验9 实现无向连通图的最小生成树

文章目录 1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件 Graph.h 内容如下&#xff1a;4.1.2 实现文件 Graph.cpp 内容如下&#xff1a;4.1.3 源文件 main.cpp 内容如下&#xff1a; 4.2 运行结果 5.上机体会 1.上机名称 实现无向…

如何使用Git管理项目工程

目录 安装git 注册gitee gitee注册示例 git账户配置 使用git仓库 在本地生成一个git仓库 创建文件并增加commit 命令详解 git status git add git commit git remote git push git pull git fetch git log git branch 安装git windows下安装git可以直接上git…

distinct导致sql超时

前言 昨天敲着敲着代码&#xff0c;小杨哥跑过来给我说&#xff0c;快看他们大会议室演示报错了&#xff0c;还是一堆错了。完了啊在演示的时候报错&#xff01;&#xff01;&#xff01;接下来我们分析一下是什么原因吧。 问题分析 查看日志&#xff1a; 从日志打印看明显的…

Gin框架简易搭建(3)--Grom与数据库

写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好&#xff0c;尤其是使用mysql指令稍有不同&#xff0c;以及更新的方法和依赖问题都是很让人头疼的&#xff0c;而且这些报错并非逻辑上的&#xf…

用大模型优化大模型预训练数据,节省20倍计算量,实现显著性能提升!

生成式人工智能研究实验室&#xff08;GAIR&#xff0c;主页&#xff1a;https://plms.ai/&#xff09;是国内首个聚焦于生成式人工智能的高校研究组。汇聚了来自于 CMU、复旦、交大&#xff08;ACM 班、IEEE 试点班等&#xff09;等顶尖高校的年轻本硕博人才。实验室专注于三大…

大数据-150 Apache Druid 安装部署 单机启动 系统架构

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

从‘盲管’到‘智网’,漫途精准构建排水管网监测方案

在城市错综复杂的基础设施网络中&#xff0c;排水管网作为城市的“血脉”&#xff0c;其高效、稳定运行直接关系到城市生活的安宁与财产的安全。面对日益频繁的雨季挑战与气候变化的不确定性&#xff0c;传统“盲管”管理模式已难以满足现代城市治理的需求。 漫途排水管网监测…

LED显示屏如何通过FMEA进行风险分析:打造无忧显示新境界

LED显示屏作为高科技产品&#xff0c;其性能受到多种因素的影响&#xff0c;包括但不限于设计缺陷、材料质量、制造工艺、使用环境等。任何环节的疏漏都可能导致显示屏出现亮度不均、色彩失真、故障频发等问题&#xff0c;进而影响用户体验和品牌形象。因此&#xff0c;通过FME…

Linux标准IO(四)-格式化I/O输入

C 库函数提供了 3 个格式化输入函数&#xff0c;包括&#xff1a;scanf()、fscanf()、sscanf()&#xff0c;其函数定义如下所示&#xff1a; #include <stdio.h> int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); int sscanf(c…

Spring Web MVC课后作业

目录 1.加法计算器 2.⽤户登录 3.留⾔板 1.加法计算器 &#xff08;1&#xff09;需求分析 加法计算器功能, 对两个整数进⾏相加, 需要客⼾端提供参与计算的两个数, 服务端返回这两个整数计算 的结果。 &#xff08;2&#xff09;接⼝定义 请求路径&#xff1a; calc/sum 请…

爬取元气手机壁纸简单案例(仅用于教学,禁止任何非法获利)

爬虫常用的库 爬虫&#xff08;Web Scraping&#xff09;是一种从网页上提取数据的技术。在 Python 中&#xff0c;有许多库可以帮助实现这一目标。以下是一些常用的爬虫库&#xff0c;以及对 BeautifulSoup 的详细介绍。 常用爬虫库 1.Requests ​ a.功能&#xff1a;用于发…

spark计算引擎-架构和应用

一Spark 定义&#xff1a;Spark 是一个开源的分布式计算系统&#xff0c;它提供了一个快速且通用的集群计算平台。Spark 被设计用来处理大规模数据集&#xff0c;并且支持多种数据处理任务&#xff0c;包括批处理、交互式查询、机器学习、图形处理和流处理。 核心架构&#x…

ChatGPT Sidebar 浏览器插件配置指南

随着聊天机器人技术的不断进步&#xff0c;越来越多的人开始依赖这些强大的工具来提高工作效率、获取信息和解决问题。OpenAI 的 ChatGPT 是其中最受欢迎的聊天机器人之一。为了方便用户在浏览网页时随时与 ChatGPT 互动&#xff0c;开发者们设计了一款名为 ChatGPT Sidebar 的…

Latex——一行的划线 如何分开

代码&#xff1a; \cmidrule(r){3-4} \cmidrule(r){5-6} \cmidrule(r){7-8}效果&#xff1a; 参考文章&#xff1a; LaTeX技巧653&#xff1a;如何隔开LaTeX表格邻近\cline表格线&#xff1f;

四,MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用)

四&#xff0c;MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用) 文章目录 四&#xff0c;MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用)1. 主键策略1.1 主键生成策略介绍 2. 准备工作&#xff1a;2.1 AUTO 策略2.2 INPUT 策略2.3 ASSIGN_ID 策略2.3.1 雪花算…

电动车、电单车入梯数据集电动车进电梯检测识别(代码+教程+数据集)

数据集介绍 共有 5347 张图像和一一对应的标注文件 标注文件格式提供了两种&#xff0c;包括VOC格式的xml文件和YOLO格式的txt文件。 标注的对象共有以下几种&#xff1a; [‘Electric-bicycle’] 标注框的数量信息如下&#xff1a;&#xff08;标注时一般是用英文标的&am…

AC-DC电源自动测试系统介绍

AC-DC电源模块测试系统是一种高度自动化的测试设备&#xff0c;能够模拟实际工作环境中的交流电输入&#xff0c;并测量电源模块的输出电压、电流、功率等关键参数&#xff0c;以及评估其电磁兼容性、效率、热特性等性能指标。 AC-DC电源模块测试系统的主要硬件组成包括&#…

TDEngine在煤矿综采管控平台中的应用

一、行业背景 智能综采管控平台&#xff0c;是将煤矿综采工作面传感器数据采集&#xff0c;通过可视化界面展示。实现综采工作面的透明化展示&#xff0c;并基于历史的传感器数据进行机器学习的训练&#xff0c;了解工作面周期来压&#xff0c;设备故障检测等数据应用。因此针…

纷享销客生态伙伴大会西安站圆满落幕,共话CRM新纪元

9月19日&#xff0c;以“智享未来&#xff0c;领创CRM新纪元”为主题的纷享销客生态伙伴大会在西安成功举办。本次会议汇聚了SaaS领域、软件行业以及TOB市场的杰出代表、行业领袖以及技术前沿专家&#xff0c;共同探讨SaaS CRM行业的当前发展趋势&#xff0c;并就AI在CRM领域的…

如何使用ssm实现基于web的山东红色旅游信息管理系统的设计与实现

TOC ssm716基于web的山东红色旅游信息管理系统的设计与实现jsp 绪论 1.1研究背景 从古到今&#xff0c;信息的录入&#xff0c;存储&#xff0c;检索都受制于社会生产力的发展&#xff0c;不仅仅浪费大量的人力资源还需要浪费大量的社会物资&#xff0c;并且不能长时间的保…