位置: IT常识 - 正文

【Vue面试专题】50+道经典Vue面试题详解!(vue面试题及答案2021)

编辑:rootadmin
【Vue面试专题】50+道经典Vue面试题详解!

推荐整理分享【Vue面试专题】50+道经典Vue面试题详解!(vue面试题及答案2021),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue面试2020,vue面试题简书,vue面试题目及答案,vue面试大全,vue面试题目及答案,vue面试题简书,vue面试大全,vue面试大全,内容如对您有帮助,希望把文章链接给更多的朋友!

目录前言相关学习资源01-Vue组件之间通信方式有哪些02-v-if和v-for哪个优先级更高?03-能说一说双向绑定使用和原理吗?04-Vue中如何扩展一个组件05-子组件可以直接改变父组件的数据么,说明原因06-Vue要做权限管理该怎么做?控制到按钮级别的权限怎么做?07 - 说一说你对vue响应式理解?08 - 说说你对虚拟 DOM 的理解?9 - 你了解diff算法吗?10 - 你知道哪些vue3新特性未完待续,持续更新ing~前言

最近要准备面试了,所以重新总结一下最新的经典Vue面试题解析。 这里是已经写完的一部分,后续面试过程中还会这一篇更新其他部分。

相关学习资源

首页置顶的相关网站-思维导图-体系课 一般慕课网上有的课程我都买了,有需要的可以私信哈

01-Vue组件之间通信方式有哪些

vue是组件化开发框架,所以对于vue应用来说组件间的数据通信非常重要。此题主要考查大家vue基本功,对于vue基础api运用熟练度。另外一些边界知识如provide/inject/$attrs则提现了面试者的知识广度。

思路分析:

1.总述知道的所有方式 2.按组件关系阐述使用场景

回答范例: 1.组件通信常用方式有以下8种:

props$emit/$on(vue3废弃)$children(vue3废弃)/$parent$attrs/$listeners(vue3废弃)ref$rooteventbusvuex

注意vue3中废弃的几个API https://v3-migration.vuejs.org/breaking-changes/children.html https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html https://v3-migration.vuejs.org/breaking-changes/events-api.html#overview

2.根据组件之间关系讨论组件通信最为清晰有效

父子组件props/$emit/$parent/ref/$attrs兄弟组件$parent/$root/eventbus/vuex跨层级关系eventbus/vuex/provide+inject02-v-if和v-for哪个优先级更高?

分析:

此题考查常识,文档中曾有详细说明v2|v3;也是一个很好的实践题目,项目中经常会遇到,能够看出面试者api熟悉程度和应用能力。

思路分析:

1.先给出结论 2.为什么是这样的,说出细节 3.哪些场景可能导致我们这样做,该怎么处理 4.总结,拔高

个人面试技巧(适用任何面试问题):

结合做过的项目

三个方面 1.首先说出答案 2.尽量遵循WWWW (4W)回答方法,where,when,what,why 3.讲人话:在哪里,在什么时候,在什么事情,为什么这样做 4.以及有什么可以优化的

回答范例:

实践中不应该把v-for和v-if放一起

在vue2中,v-for的优先级是高于v-if,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费;另外需要注意的是在vue3中则完全相反,v-if的优先级高于v-for,所以v-if执行时,它调用的变量还不存在,就会导致异常

通常有两种情况下导致我们这样做:

为了过滤列表中的项目 (比如 v-for=“user in users” v-if=“user.isActive”)。此时定义一个计算属性 (比如 activeUsers),让其返回过滤后的列表即可(比如users.filter(u=>u.isActive))。

为了避免渲染本应该被隐藏的列表 (比如 v-for=“user in users” v-if=“shouldShowUsers”)。此时把 v-if 移动至容器元素上 (比如 ul、ol)或者外面包一层template即可。

文档中明确指出永远不要把 v-if 和 v-for 同时用在同一个元素上,显然这是一个重要的注意事项。

源码里面关于代码生成的部分,能够清晰的看到是先处理v-if还是v-for,顺序上vue2和vue3正好相反,因此产生了一些症状的不同,但是不管怎样都是不能把它们写在一起的。

03-能说一说双向绑定使用和原理吗?

题目分析:

双向绑定是vue的特色之一,开发中必然会用到的知识点,然而此题还问了实现原理,升级为深度考查。

思路分析:

给出双绑定义双绑带来的好处在哪使用双绑使用方式、使用细节、vue3变化原理实现描述

回答范例:

vue中双向绑定是一个指令v-model,可以绑定一个响应式数据到视图,同时视图中变化能改变该值。v-model是语法糖,默认情况下相当于:value和@input。使用v-model可以减少大量繁琐的事件处理代码,提高开发效率。通常在表单项上使用v-model,还可以在自定义组件上使用,表示某个值的输入和输出控制。通过<input v-model="xxx">的方式将xxx的值绑定到表单元素value上;对于checkbox,可以使用true-value和false-value指定特殊的值,对于radio可以使用value指定特殊的值;对于select可以通过options元素的value设置特殊的值;还可以结合.lazy,.number,.trim对v-mode的行为做进一步限定;v-model用在自定义组件上时又会有很大不同,vue3中它类似于sync修饰符,最终展开的结果是modelValue属性和update:modelValue事件;vue3中我们甚至可以用参数形式指定多个不同的绑定,例如v-model:foo和v-model:bar,非常强大!v-model是一个指令,它的神奇魔法实际上是vue的编译器完成的。我做过测试,包含v-model的模板,转换为渲染函数之后,实际上还是是value属性的绑定以及input事件监听,事件回调函数中会做相应变量更新操作。编译器根据表单元素的不同会展开不同的DOM属性和事件对,比如text类型的input和textarea会展开为value和input事件;checkbox和radio类型的input会展开为checked和change事件;select用value作为属性,用change作为事件。04-Vue中如何扩展一个组件

此题属于实践题,考察大家对vue常用api使用熟练度,答题时不仅要列出这些解决方案,同时最好说出他们异同。

答题思路:

按照逻辑扩展和内容扩展来列举,

逻辑扩展有:mixins、extends、composition api;

内容扩展有slots;

分别说出他们使用方法、场景差异和问题。

作为扩展,还可以说说vue3中新引入的composition api带来的变化

回答范例:

常见的组件扩展方法有:mixins,slots,extends等

混入mixins是分发 Vue组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。

插槽主要用于vue组件中的内容分发,也可以用于组件扩展。

子组件Child

<div> <slot>这个内容会被父组件传递的内容替换</slot></div>

父组件Parent

<div> <Child>来自老爹的内容</Child></div>

如果要精确分发到不同位置可以使用具名插槽,如果要使用子组件中的数据可以使用作用域插槽。

混入的数据和方法不能明确判断来源且可能和当前组件内变量产生命名冲突,vue3中引入的composition api,可以很好解决这些问题,利用独立出来的响应式模块可以很方便的编写独立逻辑并提供响应式的数据,然后在setup选项中组合使用,增强代码的可读性和维护性。例如:// 复用逻辑1function useXX() {}// 复用逻辑2function useYY() {}// 逻辑组合const Comp = { setup() { const {xx} = useXX() const {yy} = useYY() return {xx, yy} }}05-子组件可以直接改变父组件的数据么,说明原因

分析

这是一个实践知识点,组件化开发过程中有个单项数据流原则,不在子组件中修改父组件是个常识问题。

【Vue面试专题】50+道经典Vue面试题详解!(vue面试题及答案2021)

参考文档:https://staging.vuejs.org/guide/components/props.html#one-way-data-flow

思路

讲讲单项数据流原则,表明为何不能这么做举几个常见场景的例子说说解决方案结合实践讲讲如果需要修改父组件状态应该如何做

回答范例

所有的 prop 都使得其父子之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。另外,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器控制台中发出警告。const props = defineProps(['foo'])// ❌ 下面行为会被警告, props是只读的!props.foo = 'bar'实际开发过程中有两个场景会想要修改一个属性:这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。在这种情况下,最好定义一个本地的 data,并将这个 prop 用作其初始值:const props = defineProps(['initialCounter'])const counter = ref(props.initialCounter)这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性:const props = defineProps(['size'])// prop变化,计算属性自动更新const normalizedSize = computed(() => props.size.trim().toLowerCase())实践中如果确实想要改变父组件属性应该emit一个事件让父组件去做这个变更。注意虽然我们不能直接修改一个传入的对象或者数组类型的prop,但是我们还是能够直接改内嵌的对象或属性。06-Vue要做权限管理该怎么做?控制到按钮级别的权限怎么做?

分析

综合实践题目,实际开发中经常需要面临权限管理的需求,考查实际应用能力。

权限管理一般需求是两个:页面权限和按钮权限,从这两个方面论述即可。

思路

权限管理需求分析:页面和按钮权限权限管理的实现方案:分后端方案和前端方案阐述说说各自的优缺点

回答范例

权限管理一般需求是页面权限和按钮权限的管理

具体实现的时候分后端和前端两种方案:

前端方案会把所有路由信息在前端配置,通过路由守卫要求用户登录,用户登录后根据角色过滤出路由表。比如我会配置一个asyncRoutes数组,需要认证的页面在其路由的meta中添加一个roles字段,等获取用户角色之后取两者的交集,若结果不为空则说明可以访问。此过滤过程结束,剩下的路由就是该用户能访问的页面,最后通过router.addRoutes(accessRoutes)方式动态添加路由即可。

后端方案会把所有页面路由信息存在数据库中,用户登录的时候根据其角色查询得到其能访问的所有页面路由信息返回给前端,前端再通过addRoutes动态添加路由信息

按钮权限的控制通常会实现一个指令,例如v-permission,将按钮要求角色通过值传给v-permission指令,在指令的moutned钩子中可以判断当前用户角色和按钮是否存在交集,有则保留按钮,无则移除按钮。

纯前端方案的优点是实现简单,不需要额外权限管理页面,但是维护起来问题比较大,有新的页面和角色需求就要修改前端代码重新打包部署;服务端方案就不存在这个问题,通过专门的角色和权限管理页面,配置页面和按钮权限信息到数据库,应用每次登陆时获取的都是最新的路由信息,可谓一劳永逸!

服务端返回的路由信息如何添加到路由器中?

// 前端组件名和组件映射表const map = { //xx: require('@/views/xx.vue').default // 同步的⽅式 xx: () => import('@/views/xx.vue') // 异步的⽅式}// 服务端返回的asyncRoutesconst asyncRoutes = [ { path: '/xx', component: 'xx',... }]// 遍历asyncRoutes,将component替换为map[component]function mapComponent(asyncRoutes) { asyncRoutes.forEach(route => { route.component = map[route.component]; if(route.children) { route.children.map(child => mapComponent(child)) } })}mapComponent(asyncRoutes)07 - 说一说你对vue响应式理解?

分析

这是一道必问题目,但能回答到位的比较少。如果只是看看一些网文,通常没什么底气,经不住面试官推敲,但像我们这样即看过源码还造过轮子的,回答这个问题就会比较有底气啦。

答题思路:

啥是响应式?为什么vue需要响应式?它能给我们带来什么好处?vue的响应式是怎么实现的?有哪些优缺点?vue3中的响应式的新变化

回答范例:

所谓数据响应式就是能够使数据变化可以被检测并对这种变化做出响应的机制。MVVM框架中要解决的一个核心问题是连接数据层和视图层,通过数据驱动应用,数据变化,视图更新,要做到这点的就需要对数据做响应式处理,这样一旦数据发生变化就可以立即做出更新处理。以vue为例说明,通过数据响应式加上虚拟DOM和patch算法,开发人员只需要操作数据,关心业务,完全不用接触繁琐的DOM操作,从而大大提升开发效率,降低开发难度。vue2中的数据响应式会根据数据类型来做不同处理,如果是对象则采用Object.defineProperty()的方式定义数据拦截,当数据被访问或发生变化时,我们感知并作出响应;如果是数组则通过覆盖数组对象原型的7个变更方法,使这些方法可以额外的做更新通知,从而作出响应。这种机制很好的解决了数据响应化的问题,但在实际使用中也存在一些缺点:比如初始化时的递归遍历会造成性能损失;新增或删除属性时需要用户使用Vue.set/delete这样特殊的api才能生效;对于es6中新产生的Map、Set这些数据结构不支持等问题。为了解决这些问题,vue3重新编写了这一部分的实现:利用ES6的Proxy代理要响应化的数据,它有很多好处,编程体验是一致的,不需要使用特殊api,初始化性能和内存消耗都得到了大幅改善;另外由于响应化的实现代码抽取为独立的reactivity包,使得我们可以更灵活的使用它,第三方的扩展开发起来更加灵活了。

知其所以然 vue2响应式:

https://github1s.com/vuejs/vue/blob/HEAD/src/core/observer/index.js#L135-L136

vue3响应式:

https://github1s.com/vuejs/core/blob/HEAD/packages/reactivity/src/reactive.ts#L89-L90https://github1s.com/vuejs/core/blob/HEAD/packages/reactivity/src/ref.ts#L67-L6808 - 说说你对虚拟 DOM 的理解?

分析

现有框架几乎都引入了虚拟 DOM 来对真实 DOM 进行抽象,也就是现在大家所熟知的 VNode 和 VDOM,那么为什么需要引入虚拟DOM 呢?围绕这个疑问来解答即可!

思路

vdom是什么引入vdom的好处vdom如何生成,又如何成为dom在后续的diff中的作用

回答范例

虚拟dom顾名思义就是虚拟的dom对象,它本身就是一个 JavaScript 对象,只不过它是通过不同的属性去描述一个视图结构。

通过引入vdom我们可以获得如下好处:将真实元素节点抽象成 VNode,有效减少直接操作 dom 次数,从而提高程序性能方便实现跨平台

vdom如何生成?在vue中我们常常会为组件编写模板 - template, 这个模板会被编译器 - compiler编译为渲染函数,在接下来的挂载(mount)过程中会调用render函数,返回的对象就是虚拟dom。但它们还不是真正的dom,所以会在后续的patch过程中进一步转化为dom。

挂载过程结束后,vue程序进入更新流程。如果某些响应式数据发生变化,将会引起组件重新render,此时就会生成新的vdom,和上一次的渲染结果diff就能得到变化的地方,从而转换为最小量的dom操作,高效更新视图。9 - 你了解diff算法吗?

分析

必问题目,涉及vue更新原理,比较考查理解深度。

思路

diff算法是干什么的它的必要性它何时执行具体执行方式拔高:说一下vue3中的优化

回答范例 1.Vue中的diff算法称为patching算法,虚拟DOM要想转化为真实DOM就需要通过patch方法转换。

2.Vue 2.x中为了降低Watcher粒度,每个组件只有一个Watcher与之对应,此时就需要引入patching算法才能精确找到发生变化的地方并高效更新。

3.vue中diff执行的时刻是组件内响应式数据变更触发实例执行其更新函数时,更新函数会再次执行render函数获得最新的虚拟DOM,然后执行patch函数,并传入新旧两次虚拟DOM,通过比对两者找到变化的地方,最后将其转化为对应的DOM操作。

4.patch过程是一个递归过程,遵循深度优先、同层比较的策略;

5.vue2和vue3的虚拟dom的区别和更新如下:

vue2的vdom

vue3的vdom

10 - 你知道哪些vue3新特性

分析

官网列举的最值得注意的新特性:https://v3-migration.vuejs.org/

也就是下面这些:

Composition API SFC Composition API语法糖 Teleport传送门 Fragments片段 Emits选项 自定义渲染器 SFC CSS变量 Suspense

以上这些是api相关,另外还有很多框架特性也不能落掉。

回答范例

api层面Vue3新特性主要包括:Composition API、SFC Composition API语法糖、Teleport传送门、Fragments 片段、Emits选项、自定义渲染器、SFC CSS变量、Suspense

另外,Vue3.0在框架层面也有很多亮眼的改进:

更快虚拟DOM重写编译器优化:静态提升、patchFlags、block等基于Proxy的响应式系统更小:更好的摇树优化更容易维护:TypeScript + 模块化更容易扩展独立的响应化模块自定义渲染器未完待续,持续更新ing~

2022-8-27

本文链接地址:https://www.jiuchutong.com/zhishi/299032.html 转载请保留说明!

上一篇:js中?.、??的具体用法(js中...的用法)

下一篇:【web前端面试宝典】经典10问(上篇)(web前端面试题2021及答案)

  • 如何取消支付宝的自动扣费服务(如何取消支付宝刷脸支付功能)

    如何取消支付宝的自动扣费服务(如何取消支付宝刷脸支付功能)

  • reno7se支持NFC吗(note7pro支持nfc吗)

    reno7se支持NFC吗(note7pro支持nfc吗)

  • 单删是什么意思(单删是什么意思(单删是什么意思))

    单删是什么意思(单删是什么意思(单删是什么意思))

  • 微信朋友权限仅聊天可以看朋友圈吗(微信朋友权限仅聊天是什么意思)

    微信朋友权限仅聊天可以看朋友圈吗(微信朋友权限仅聊天是什么意思)

  • 光纤插头怎么拔(光纤插头怎么拔下来在插上灯就不亮了)

    光纤插头怎么拔(光纤插头怎么拔下来在插上灯就不亮了)

  • 苹果6plus内存16g要怎么扩大(苹果6plus内存16g多少钱)

    苹果6plus内存16g要怎么扩大(苹果6plus内存16g多少钱)

  • npu处理器有什么用(npu处理器玩游戏怎么样)

    npu处理器有什么用(npu处理器玩游戏怎么样)

  • 抖音怎么发60秒以上的视频(抖音怎么发60秒视频)

    抖音怎么发60秒以上的视频(抖音怎么发60秒视频)

  • vivo锁屏时间怎么居中(vivo锁屏时间怎么变大)

    vivo锁屏时间怎么居中(vivo锁屏时间怎么变大)

  • 拼多多店铺审核要多久(拼多多店铺审核中可以发布商品吗)

    拼多多店铺审核要多久(拼多多店铺审核中可以发布商品吗)

  • ipad可以用几年(苹果ipad可以用几年)

    ipad可以用几年(苹果ipad可以用几年)

  • ipad怎么开机没反应(iPad怎么开机没反应)

    ipad怎么开机没反应(iPad怎么开机没反应)

  • 锂电池保护板输出电压低(锂电池保护板输出电压与电池电压不一致)

    锂电池保护板输出电压低(锂电池保护板输出电压与电池电压不一致)

  • 为什么苹果软件闪退(为什么苹果软件无法下载)

    为什么苹果软件闪退(为什么苹果软件无法下载)

  • 荣耀note8是多少寸的呀(荣耀note8有多大)

    荣耀note8是多少寸的呀(荣耀note8有多大)

  • xr通话时不能录音吗(苹果xr打电话录屏怎么没声音)

    xr通话时不能录音吗(苹果xr打电话录屏怎么没声音)

  • 快手小红心能点多少次(快手小红心点多少有推广)

    快手小红心能点多少次(快手小红心点多少有推广)

  • 华为荣耀9xpro上市时间

    华为荣耀9xpro上市时间

  • 无线网怎么连接电视(无线网怎么连接电视机观看)

    无线网怎么连接电视(无线网怎么连接电视机观看)

  • 苹果xr和xmax的区别(xr和xmax哪个值得买)

    苹果xr和xmax的区别(xr和xmax哪个值得买)

  • bkk-al10是什么型号(bkl -al10是什么型号)

    bkk-al10是什么型号(bkl -al10是什么型号)

  • 小爱语音引擎可以卸载吗(小爱语音引擎可以用在别的手机上吗)

    小爱语音引擎可以卸载吗(小爱语音引擎可以用在别的手机上吗)

  • 苹果x录像功能在哪里(iphone x录像在哪)

    苹果x录像功能在哪里(iphone x录像在哪)

  • 如何设置Win7系统开机跳过硬盘自检?(如何设置win7系统密码)

    如何设置Win7系统开机跳过硬盘自检?(如何设置win7系统密码)

  • ps笔刷在哪里(ps笔刷在哪里调)

    ps笔刷在哪里(ps笔刷在哪里调)

  • 商品流通企业税种有哪些
  • 如何判断销售额含税还是不含税
  • 一般纳税人的做账流程
  • 所得税残疾人工资加计扣除
  • 个人独资企业出资额是注册资本吗
  • 一个月没有账务往来,现金日记账如何登记?
  • 出纳取备用金需要交税吗
  • 小规模未达起征点销售额是多少
  • 研发费用的社保怎么做
  • 购入设备发生的运输费计入什么科目
  • 应交城市维护建设税分录怎么做
  • 海关进口货物如何消杀
  • 合同和付款单位不一致发票应该开给谁
  • 企业申请增值税专用发票
  • 滴滴顺风车发票图片大全
  • 关于金三地税打印控件
  • 何时进行文化事业建设
  • 当月开票一定要当月入账吗
  • 主营业务成本没有结转怎么办
  • 免租期间房产税计税依据
  • 软件著作权认证查询
  • win10 2004 2009
  • 赠品怎么做账务分录
  • 出口报关单有什么用
  • win10我无法更改某些设置
  • qbdagent2002.exe - qbdagent2002是什么进程 有什么用
  • 苹果手机设置来电铃声怎么设置
  • 不动产增值税怎么算
  • msmpeng.exe 是什么
  • 库存股属于什么项目
  • Win11/10 Surface App 新增支持自动检测 Surface Slim Pen 1 手写笔
  • 银行存放同业的钱安全吗
  • 有关增值税的计算真题
  • 资本化计入
  • 其他综合收益含税吗
  • 企业利润取出税费有哪些
  • php限制接口调用次数
  • 以前年度损益调整账务处理分录
  • php找零
  • 房屋土地使用权到期后续费标准
  • 什么是CHATGPT
  • 土地增值税的扣除项目金额怎么算
  • 小微企业免征增值税优惠
  • 设计服务的成本票可以暂估吗
  • 文化事业建设费的征收范围
  • 借预收账款贷其他应付款什么意思
  • phpcms安装
  • 货代一般一个柜利润多少
  • 各人所得税法规定
  • 其他应收款利息按什么计算
  • 稳岗补贴算不算财政补贴
  • 固定成本和变动成本包括哪些
  • 生育津贴是怎么申请
  • 预付卡充值可以退吗
  • 公司为员工异地缴纳五险一金
  • 免增值税进项税怎么弄
  • 工程投标保证金什么时候交
  • 如何计算税前工资
  • 汇算清缴调增的工资怎么做账
  • 给业务员的佣金怎么做账
  • 资本公积和盈余公积的用途
  • 公对私转账有没有手续费
  • 建账的要点及应注意的问题
  • 苹果电脑邮箱添加163邮箱
  • centos7yum安装
  • windows7的使用方法
  • win8的应用商店
  • win10资源管理器启动不了
  • rhel6提供5种基本的安装方式
  • unity中
  • unity粒子制作ui特效
  • javascript怎么学
  • unity3d物体旋转
  • jquery常用选择器种类
  • jquery iframe写入内容
  • 税控盘忘记抄报罚多少
  • 小微企业不交所得税
  • 国考报四川的去哪考
  • 矿产资源税怎样征收
  • 按季申报印花税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设