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

news2024/9/28 2:39:36

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.coloradmin.cn/o/2171996.html

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

相关文章

这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了

大模型&#xff08;Large Language Models, LLMs&#xff09;是近年来人工智能领域的一大热点&#xff0c;它们在自然语言处理、对话系统、内容生成等多个方面展现出了强大的能力。随着技术的发展&#xff0c;市面上出现了许多介绍大模型理论与实践的书籍&#xff0c;为研究人员…

碳性电池和碱性电池的区别

碳性电池和碱性电池是两种常见的电池类型&#xff0c;它们在多个方面存在显著的差异。下面是它们之间的一些主要区别&#xff1a; 1. 化学组成 碳性电池&#xff0c;又称为锌锰电池。通常使用二氧化锰作为正极材料&#xff0c;锌作为负极材料&#xff0c;并且电解质为酸性的NH4…

产品推介——SOP4 随机相位可控硅光耦KLM305X

产品描述Product Description KLM305X 系列由一个砷化镓红外发光二极管和一个单晶硅芯片的随机相位光电双向晶闸管组成的可控硅光电耦合器&#xff0c;它被设计用于连接电子控制和功率双向可控硅开关&#xff0c;以控制115至240VAC工作电压下的电阻和感应负载。 功能图Functi…

【一文读懂】C#如何实现通用的排序功能

目录 通用排序功能 1.升序 2.降序 测试 1.测试代码 2.测试结果 本篇文章来分享一下C#如何实现通用的排序功能。在项目中经常会使用到排序的方法&#xff0c;那如何使排序方法更加通用呢&#xff1f;可以通过泛型&#xff0c;接口&#xff0c;委托来实现。 通用排序功能…

【移植】Combo解决方案之W800芯片移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 本方案基于 OpenHarmony LiteOS-M 内核&#xff0c;使用联盛德 W80…

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南

在2024年&#xff0c;随着项目管理领域的不断发展&#xff0c;开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统&#xff0c;帮助项目经理们找到最佳选择&#xff0c;不容错过。 在项目管理日益复杂的今天&#xff0c;开源项…

Linux应急响应技巧整理

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

是否是递增的字符串(c语言)

1 其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成 (字符串长度大于等于2)。 例如:字符串: uvwxyz满足要求; 而字符串: uvxwyz不满足要求。 2.我们先输入字符串&#xff0c;然后进行判断是否a[i]1a[i1]&#xff0c;如果是则是由连续字母组成的字符串&#xf…

【性能优化】低配starRocks常驻内存优化

背景说明 由于服务器的实际资源小于starRocks官方的配置&#xff0c;导致starRocks在无任务的情况下&#xff0c;常驻内存偏高&#xff0c;可用于查询的资源变小。 官方文档 实际部署的集群一般是4C8G和8C16G&#xff0c;be的配置不达标 为了解决单次查询内存不足的问题&…

拉格朗日插值讲解与MATLAB例程

文章目录 拉格朗日插值拉格朗日插值的基本概念已 知 数 据 点拉格朗日基多项式插值多项式 MATLAB源代码代码讲解运行结果拉格朗日插值的特点&#xff08;优缺点&#xff09; 拉格朗日插值 拉格朗日插值是一种用于在已知数据点之间进行插值的数学方法。它通过构造拉格朗日基多 …

处理execl表格的库----openpyxl

一、打开现有的工作文档 import openpyxl# 打开工作簿 workbook openpyxl.load_workbook(download/nihao.xlsx)# 获取工作表 sheet workbook[Sheet1]# 读取单元格数据 cell_value sheet[A1].value print(cell_value)二、创建新的execl文档 import openpyxl# 创建新的工作簿…

Pandas -----------------------基础知识(五)

索引和列操作函数缺失值 索引和列操作 # 1 加载数据 # 1.1 从链家租房数据集中获取天通苑租房区域的所有数据存储在df2中 # 1.2 从df2中获取价格列存储在df2_price对象 import pandas as pd df pd.read_csv(/root/pandas_code_ling/data/b_LJdata.csv) df2 df[df[区域] 天通苑…

Android Button “No speakable text present” 问题解决

记录一个问题&#xff0c;今天让同学们做了个小车控制界面&#xff0c;使用Button控件&#xff0c;删除设置的text属性&#xff0c;会出现“No speakable text present”的错误&#xff0c;如图所示。这是由于Android的无障碍设置需要朗读Button的文本&#xff0c;如果没有设置…

Linux系统安装MySQL8.40(保姆级教程)

前言&#xff1a; 说明&#xff1a;本文章是在阿里云ecs上安装MySQL&#xff0c;即&#xff1a;Linux是在联网状态下。 一、安装前环境准备 1.查看MySQL应用是否已存在 rpm -qa |grep mysql说明&#xff1a;若返回空信息&#xff0c;就说明当前环境没有安装MySQL。 2.查看ma…

重磅!三十载种业盛会今年10月换址举办

重磅&#xff01;三十载种业盛会今年10月换址举办 粮安天下&#xff0c;种筑基石。2024 年&#xff0c;在种业振兴行动迈入“五年见成效”新阶段的关键之年&#xff0c;哈尔滨种业博览会也即将迎来它的第30个年头。因“第九届亚洲冬季运动会”占用哈尔滨国际会展中心&#xff…

en造数据结构与算法C# 之 二叉排序树的增/查

前篇&#xff1a;en造数据结构与算法C# 二叉排序树 泛型类的基本构成-CSDN博客 了解了基本结构以后就可以为其编写增加代码了 注意在二叉排序树类中定义了一个根节点 AddNode&#xff08;添加节点&#xff09;方法分析 输入&#xff1a; 一个添加节点的位置&#xff08;默认为…

鳕鱼检测系统源码分享

鳕鱼检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142463789 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 多模态…

【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构

一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…

电脑桌面美化用什么软件?精选6款桌面文件管理工具,小白秒变大师!

随着电脑在日常生活和工作中的普及&#xff0c;越来越多的用户开始重视电脑桌面美化的需求。单调的桌面背景和杂乱的文件排列已经无法满足我们对个性化与效率的追求。许多用户渴望找到合适的桌面整理工具&#xff0c;使他们的电脑桌面不仅美观&#xff0c;还能提升工作效率。为…