Vue3 高频面试题及详细答案(实战版)_第1页
Vue3 高频面试题及详细答案(实战版)_第2页
Vue3 高频面试题及详细答案(实战版)_第3页
Vue3 高频面试题及详细答案(实战版)_第4页
Vue3 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Vue3高频面试题及详细答案(实战版)一、基础认知类1、Vue3相比Vue2有哪些核心优势?从实际开发和性能角度,核心提升主要有这几点:性能更好:重写了响应式系统,用Proxy替代Object.defineProperty,支持数组、新增属性、删除属性监听,无需额外处理;同时优化了虚拟DOM,编译阶段做了静态提升、补丁标记,减少页面渲染开销。代码组织更灵活:新增组合式API,替代Vue2选项式API的碎片化开发,复杂业务可以按功能逻辑聚合代码,不再被data、methods、watch等选项拆分,维护性大幅提升。打包体积更小:支持按需引入,核心API可单独导入,未使用的模块会被打包工具树摇,相比Vue2整体体积更轻量。更好的TS支持:源码基于TS重写,类型推导完善,组件、API都有完整类型提示,适配大型项目开发。新增实用特性:Teleport、Suspense、多根节点、自定义渲染器等,解决很多Vue2的开发痛点。2、Vue3为什么放弃Object.defineProperty改用Proxy?核心原因是Object.defineProperty存在监听缺陷,无法满足复杂场景需求,具体痛点和优化点:无法监听数组变更:Vue2只能重写数组7个变异方法实现监听,对于数组下标修改、数组长度变更无法监听,需要手动处理;Proxy可以直接拦截数组所有操作。无法监听新增/删除属性:Vue2中对象新增属性、删除属性不会触发响应式,需要用$set/$delete;Proxy天然支持属性新增、删除、修改的全量拦截。监听范围更广:Proxy可以拦截读取、修改、删除、遍历、原型查询等十余种操作,而Object.defineProperty只能拦截单个属性的读写。兼容性可控:Vue3放弃了IE低版本支持,无需兼顾老旧浏览器,得以使用ES6+的Proxy特性。3、Vue3组合式API和选项式API的区别?各自适用场景?核心区别:选项式API:按照选项维度拆分代码(data、methods、computed、watch),同一业务逻辑会分散在不同选项中,适合简单页面。组合式API:按照业务逻辑维度聚合代码,同一个功能的变量、方法、监听可以写在一起,还能抽离独立组合函数复用。适用场景:选项式API:简单后台页面、展示型组件、小型项目,上手快、代码直观。组合式API:复杂业务组件、大型项目、逻辑复用场景,代码可读性和维护性更高,也是Vue3项目主流写法。二、响应式原理核心题4、ref和reactive的区别?各自使用场景?两者都是创建响应式数据的核心API,底层原理和适用场景差异明显:1、底层原理ref:基于Object.defineProperty实现,专门针对基本数据类型(字符串、数字、布尔、null、undefined),也可以接收对象/数组,内部会自动转为reactive。reactive:基于Proxy实现,仅针对引用数据类型(对象、数组、Map、Set),不支持基本类型。2、使用方式ref创建的数据,模板中可直接使用,脚本中需要通过.value访问和修改。reactive创建的数据,无需.value,直接读写属性即可。3、适用场景ref:简单基础类型数据、单一变量状态(如loading、弹窗显示状态、页码)。reactive:复杂对象、表单数据、列表数据、多属性状态集合。5、为什么ref需要.value,模板中却不用写?这是Vue3的语法糖优化:在<template>模板中,Vue会自动解析ref类型数据,自动脱壳(自动获取.value),所以无需手动书写。在<scriptsetup>脚本中,没有自动脱壳逻辑,为了精准控制数据,必须手动通过.value读写数据,避免隐式转换带来的bug。6、toRef和toRefs的区别?解决什么问题?两者核心作用都是让解构后的对象属性保留响应式,解决reactive对象解构后丢失响应式的问题。toRef:单独为对象的单个属性创建ref响应式引用,新旧数据保持联动,修改新值会影响原对象。toRefs:批量将reactive对象的所有属性转为ref响应式变量,常用于组件解构赋值、组合函数返回值解构。重点区别:toRefs只会处理对象自身可枚举属性,不会处理新增属性;解构后的变量依然具备响应式,直接修改即可更新视图。7、Vue3响应式丢失的常见场景及解决方案开发中最常见的4种响应式丢失场景,对应落地解决方案:场景1:reactive对象直接解构赋值,解构出的变量丢失响应式

解决:使用toRefs批量解构,或toRef单独解构场景2:直接替换reactive整个对象(如res.data直接赋值)

解决:不要整体替换,逐个属性赋值,或改用ref定义对象场景3:函数参数解构、展开运算符赋值

解决:避免直接展开赋值,保留原响应式对象引用场景4:对象新增属性未监听

解决:Vue3Proxy已支持,无需处理,Vue2需用$set8、computed和watch的区别及使用场景核心区别:计算属性computed:基于依赖缓存,依赖不变则不会重复执行;是属性派生,用于数据二次处理、计算、筛选;支持只读和可写。监听watch:无缓存,数据变化就执行;是事件监听,用于数据变化后的异步操作、复杂逻辑、多数据联动。使用场景:computed:总价计算、数据筛选、格式化文本、状态派生watch:监听表单变化发起请求、路由变化处理、数据变更异步操作补充:Vue3watch可以监听多个数据源,支持立即执行、深度监听、防抖节流自定义配置。三、组合式API&语法糖9、scriptsetup语法糖的优势和特点<scriptsetup>是Vue3官方推荐的编译语法糖,简化组合式API写法,工程中必用:代码更简洁:无需return变量和方法,定义后模板直接使用编译性能更高:减少运行时开销,整体体积更小自动解构优化:组件、指令导入后直接使用,无需注册支持顶层await:无需包裹async函数,直接使用异步请求天然支持TS:类型推导更精准,适配类型项目10、Vue3组件通信方式有哪些?覆盖父子、兄弟、跨级、全局通信,常用方案如下:父子通信:props父传子;emit子传父;defineProps/defineEmits(setup语法糖专属)父获取子实例:ref绑定子组件实例,defineExpose暴露子组件属性和方法跨级/深层通信:provide/inject,无需逐层传递,适合全局状态、主题、配置下发兄弟/全局通信:Pinia(替代Vuex,Vue3首选)、mitt轻量事件总线11、defineProps、defineEmits、defineExpose作用三个都是setup语法糖专属编译宏,无需导入,仅在setup中生效:defineProps:定义父组件传递的参数,支持类型校验、默认值、必填校验,替代Vue2props选项defineEmits:定义子组件触发的自定义事件,规范事件名称和传参,实现子传父defineExpose:默认情况下,setup组件对外封闭,父组件ref无法获取子组件属性方法;通过该API主动暴露需要对外使用的变量和方法四、核心特性与原理12、Vue3虚拟DOM优化原理Vue3在编译阶段对虚拟DOM做了编译优化,大幅减少diff开销:静态提升:页面中不变的静态节点(纯文本、固定标签),会被提升到渲染函数外部,只创建一次,不会每次更新重新渲染补丁标记:动态节点会标记唯一标识,区分文本变化、属性变化、样式变化,diff时只对比标记的动态内容,跳过静态节点事件缓存:开启缓存后,动态事件不会每次渲染重新生成函数,减少内存开销13、Vue3生命周期变化?组合式API生命周期对应关系Vue3移除了beforeCreate、created,组合式API中直接用顶层代码替代,其余生命周期函数均以onXXX形式注册:setup顶层代码=>beforeCreate+createdonBeforeMount=>挂载前onMounted=>挂载后(常用,请求数据、获取DOM)onBeforeUpdate=>更新前onUpdated=>更新后onBeforeUnmount=>卸载前onUnmounted=>卸载后(常用,清除定时器、解绑事件)新增:onActivated、onDeactivated(keep-alive缓存组件)、onErrorCaptured(错误捕获)14、Teleport、Suspense的作用和使用场景Teleport(传送门)作用:将组件DOM结构挂载到任意指定的DOM节点,脱离当前组件层级,解决嵌套层级样式穿透、overflow隐藏、z-index层级失效问题。场景:弹窗、抽屉、Toast、全局提示框等需要全局悬浮的组件。Suspense作用:处理异步组件加载,等待异步组件渲染完成前,展示兜底loading或占位内容,避免页面空白。场景:路由懒加载组件、异步请求渲染的组件、动态导入组件。五、状态管理&工程落地15、Pinia相比Vuex的优势?为什么Vue3推荐Pinia?Pinia是Vue官方新一代状态管理库,完全适配Vue3,解决了Vuex的诸多痛点:简化结构:移除mutation,状态修改直接在action中完成,无需同步异步拆分,代码更简洁模块化天然隔离:每个仓库独立模块,无需手动嵌套modules,无命名空间冲突问题TS支持完善:类型推导精准,自动推断状态类型,无需额外声明无冗余API:去除state、getters、mutations、actions的繁琐约束,上手成本低支持组件外调用:可在路由、工具函数中直接使用,无需挂载全局16、Vue3项目性能优化方案(实战向)整理项目中常用、落地有效的优化手段:编译优化:开启静态提升、补丁标记,使用v-memo缓存动态节点组件优化:路由懒加载、组件异步引入、大组件拆分、keep-alive缓存页面渲染优化:长列表使用虚拟列表(vue-virtual-scroller),避免大量DOM渲染;v-for必须绑定key,禁止v-for和v-if同级使用响应式优化:静态数据无需响应式用markRaw;复杂数据用shallowRef、shallowReactive浅层响应式,减少监听开销打包优化:按需引入UI库、打包压缩、去除冗余依赖、开启树摇逻辑优化:watch防抖节流、computed缓存计算、销毁组件时清除定时器和监听事件六、高频易错面试题17、shallowRef和shallowReactive作用?什么时候用?两者都是浅层响应式API,只对第一层数据做响应式监听,深层数据不监听,用于提升性能。shallowRef:只监听数据整体替换,不监听对象内部属性变化,适合大型对象、后端原始返回数据shallowReactive:只监听对象第一层属性变化,深层属性不具备响应式使用场景:超大表单、超长列表、复杂嵌套对象,无需精准监听内部变化,减少响应式依赖收集,降低页面卡顿风险。18、markRaw作用?用于标记数据永久非响应式,被标记的数据不会被Proxy劫持,永远不会触发视图更新。场景:第三方实例、DOM元素、静态常量、不需要响应式的大型原始数据,避免无效的响应式劫持,提升性能。19、Vue3多根节点有什么注意事项?Vue3组件默认支持多根节点,无需外层包裹div,但有两个核心注意点:多根节点组件不支持ref自动绑

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论