版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高频面试题及详细答案(实战通俗版)一、Vue基础核心面试题1.说说Vue的特点是什么?Vue是一套轻量级、渐进式的前端框架,核心特点我日常开发中感触比较深的有这几点:第一是数据驱动视图,不用手动操作DOM,只需要修改数据,页面就会自动更新,极大减少了DOM操作的冗余代码;第二是组件化开发,可以把页面拆分成多个独立、可复用的组件,代码结构清晰,方便维护和复用,团队协作也更顺畅;第三是渐进式框架,上手门槛低,既可以只用来开发简单页面,也可以搭配路由、状态管理、脚手架搭建大型单页应用;第四是双向数据绑定,表单类开发非常便捷,视图和数据可以实时同步;另外还有虚拟DOM、diff算法、生命周期这些核心能力,保证了页面渲染的性能和可控性。2.Vue2和Vue3的核心区别有哪些?我平时项目既用过Vue2也用过Vue3,核心差异主要集中在底层原理和语法优化上:1.底层响应式原理不同:Vue2是基于Object.defineProperty劫持对象属性,无法监听新增、删除属性,也不支持数组下标、长度修改的监听;Vue3用Proxy代理整个对象,完美解决了这些问题,监听范围更广、更全面。2.语法形式不同:Vue2主要是Options选项式API,代码分散在data、methods、computed等选项中;Vue3支持组合式API(setup),可以按业务逻辑聚合代码,大型项目更易维护,同时也兼容选项式API。3.生命周期调整:Vue3移除了beforeCreate、created,统一在setup中编写;部分生命周期钩子更名,同时新增了onRenderTracked、onRenderTriggered等调试钩子。4.性能优化:Vue3重写了虚拟DOM,diff算法更快,支持静态节点提升、补丁标记,减少不必要的DOM对比;打包体积更小,运行速度更快。5.TS支持更好:Vue3源码基于TS重写,天然适配类型校验,大型项目开发更稳定,Vue2对TS的支持比较有限。3.什么是Vue生命周期?常用生命周期有哪些?生命周期就是组件从创建、挂载、更新、销毁的完整过程,Vue内置了一系列钩子函数,让我们可以在对应阶段执行自定义逻辑。日常开发最常用的钩子:1.created(Vue2):组件创建完成,数据、方法已初始化,DOM还未生成,适合发起接口请求、初始化数据;2.mounted:组件DOM挂载完成,页面节点已渲染,适合操作DOM、初始化定时器、引入第三方插件;3.updated:数据更新后DOM重新渲染完成,可监听页面更新后的DOM状态;4.unmounted(Vue2为destroyed):组件销毁完成,一定要在这里清除定时器、监听事件,防止内存泄漏。补充:Vue3setup语法糖中,没有beforeCreate和created,代码直接写在setup最顶部即可替代这两个钩子的逻辑。4.v-if和v-show的区别?使用场景是什么?两者都是控制元素显示隐藏,核心差异在渲染机制和性能:1.渲染原理:v-if是真正的条件渲染,条件为false时,元素直接不会渲染、不存在于DOM树中;条件切换时会重新创建/销毁组件。v-show只是控制CSS的display属性,不管条件真假,元素都会渲染,只是切换显示隐藏样式。2.性能消耗:v-if切换开销大,初始渲染开销小;v-show初始渲染开销大,频繁切换开销小。3.使用场景:页面元素显示/隐藏切换不频繁,用v-if,比如弹窗、权限控制模块;元素需要频繁切换,比如tab切换、下拉展开收起,用v-show。5.v-for为什么要加key?key能用index吗?v-for的key是虚拟DOMdiff算法的唯一标识,作用是帮助Vue精准识别新旧节点,避免错误复用DOM,提升渲染效率。不推荐直接用index作为key,原因很实际:如果数组进行删除、插入、排序操作,数组下标会重新排列,导致key错乱。diff算法会认为所有节点都发生了变化,强制更新所有DOM,不仅降低性能,还可能导致表单输入值错乱、组件状态丢失等bug。最佳实践:优先用后端返回的唯一ID、uuid作为key,稳定性最高。如果数组只是静态展示、不会增删排序,用index不会有问题,但日常开发不建议养成习惯。二、Vue响应式原理核心题1.详细说说Vue2响应式原理及缺陷Vue2的响应式核心是Object.defineProperty数据劫持+发布订阅模式。具体流程:Vue在初始化实例时,会遍历data中的所有属性,通过Object.defineProperty为每个属性设置get和set方法。页面渲染时触发get收集依赖(记录用到该数据的视图),当数据被修改时触发set方法,通知依赖更新,重新渲染视图。存在的缺陷(面试高频):1.无法监听对象新增、删除属性,因为初始化时只劫持了已有属性,后续新增的属性没有get/set;2.无法监听数组下标修改、数组长度修改,所以Vue2重写了数组的push、pop、splice等7个变异方法,只有通过这些方法修改数组才能触发更新;3.深层对象需要递归遍历劫持,初始化性能开销较大。补充解决方案:新增属性用this.$set,删除属性用this.$delete,数组修改优先用splice等变异方法。2.Vue3Proxy响应式的优势Vue3使用ES6Proxy代理整个对象,相比Vue2的语法缺陷完全补齐,优势很明显:1.监听范围全覆盖:可以监听对象新增、删除属性,也能监听数组下标、长度的修改,无需重写数组方法,也不需要$set方法;2.懒递归提升性能:Proxy是按需劫持,只会代理外层对象,访问内层属性时才会递归代理,相比Vue2初始化全量递归劫持,大幅降低初始化性能消耗;3.支持更多操作监听:除了读写属性,还能监听属性查询、删除、遍历等多种操作,响应式更全面;4.无需额外API:彻底告别$set、$delete,代码更简洁。3.computed和watch的区别及使用场景两者都是监听数据变化,核心区别是设计定位、缓存机制、使用场景不同:1.缓存机制:computed是计算属性,有缓存,依赖数据不变时,多次调用不会重复计算,直接读取缓存;watch无缓存,数据每次变化都会执行回调。2.数据流向:computed是数据派生,基于已有数据计算新数据,是纯数据转换,不支持异步;watch是数据监听,监听数据变化后执行自定义逻辑,支持异步操作。3.使用场景:简单的数据转换、多数据合并计算,用computed,比如价格合计、字符串格式化、状态判断;需要监听数据变化执行异步请求、复杂业务逻辑、多操作处理,用watch,比如搜索框防抖、数据变化后刷新列表。补充:watch可以开启immediate立即执行、deep深度监听,适配复杂对象监听场景。三、Vue组件通信面试题1.Vue常用组件通信方式有哪些?(全场景)日常开发根据组件关系选择不同通信方式,覆盖所有场景:1.父子组件通信:父传子用props,子传父用$emit,子获取父实例用$parent,父获取子实例用$refs;2.兄弟组件通信:Vue2用事件总线($bus),Vue3推荐mitt;也可以借助父组件中转;3.跨层级/全局通信:Vue2/Vue3通用provide/inject(祖孙组件穿透传值);全局状态管理Vuex/Pinia(大型项目首选);4.简单全局传值:挂载全局属性,适合简单静态数据。2.props传值的注意事项有哪些?1.单向数据流:props是只读的,子组件不能直接修改props值,否则会报错;如果需要修改,建议在子组件定义局部变量接收,或者通过computed转换;2.类型校验:开发中必须对props做类型、默认值、必填校验,规范传参,避免类型错误导致的bug;3.复杂类型默认值:对象、数组类型的默认值,必须用函数返回,不能直接写字面量,防止多个组件实例共用同一内存地址,导致数据互相污染;4.深层属性修改:虽然Vue不会报错,但子组件直接修改props传入的对象/数组深层属性,属于不规范写法,会影响父组件原始数据,尽量避免。3.provide/inject的优缺点和使用场景provide/inject是Vue提供的祖孙组件穿透传值方案,无需逐层传参。优点:解决了多层嵌套组件props逐层传递的“props层层穿透”问题,代码简洁;缺点:响应式默认失效(普通传值不会跟随父组件更新),且数据来源不清晰,多层嵌套时难以定位数据提供方,不适合全局复杂状态管理;使用场景:适合深层嵌套组件的静态数据、全局配置、主题样式、权限信息等低频更新的数据传值。如需响应式,可搭配ref/reactive使用。四、Vue路由面试题(VueRouter)1.路由跳转方式及区别常用两种跳转方式:声明式导航router-link、编程式导航$router.push。1.router-link:标签式跳转,无需手动写js,自带路由激活样式,会阻止默认a标签刷新行为,适合模板中固定跳转;2.$router.push:js动态跳转,灵活度高,可以在接口请求、判断逻辑后执行跳转,适合动态业务场景;补充:还有replace(替换当前路由,无历史记录)、go(前进后退),push会新增历史记录,页面可以返回,replace无法返回。2.路由参数query和params的区别1.传参方式:query是url拼接参数,类似get请求;params是路由隐式传参,需要在路由配置中声明动态参数;2.地址显示:query参数会显示在浏览器地址栏,刷新页面参数不丢失;params参数默认不显示,Vue2刷新会丢失,Vue3搭配history模式可保留;3.使用规范:params只能用name匹配路由,不能用path;query既可以用name也可以用path;4.安全性:params相对私密,适合传id、token等敏感参数;query适合传筛选、分页等公开参数。3.路由守卫有哪些?全局守卫执行顺序路由守卫用于控制页面权限、登录拦截、页面跳转校验,常用全局守卫:1.全局前置守卫beforeEach:每次路由跳转前执行,最常用,用于登录校验、权限拦截;2.全局解析守卫beforeResolve:组件内守卫、路由独享守卫执行完成后执行;3.全局后置守卫afterEach:路由跳转完成后执行,无next方法,适合修改页面标题、关闭加载动画;完整执行顺序:前置守卫=>路由独享守卫=>组件内前置守卫=>解析守卫=>后置守卫。4.路由懒加载的原理和作用路由懒加载就是按需加载组件,不用在项目初始化时加载所有页面组件,只有跳转到对应路由时,才会加载对应的组件代码。核心作用:优化项目首屏加载速度,减少首屏打包体积,避免项目页面过多导致打包文件过大、首屏卡顿的问题,是大型Vue项目必备优化手段。语法:component:()=>import('@/views/home/index.vue')五、Vue状态管理(Vuex/Pinia)1.Vuex的核心属性和执行流程Vuex是Vue全局状态管理工具,核心有5个属性:1.state:存储全局状态数据,唯一数据源;2.mutations:唯一修改state的方式,同步执行,用于修改数据,方便追踪数据变化;3.actions:异步操作,不直接修改state,通过调用mutations修改数据,用于处理接口请求、异步逻辑;4.getters:类似computed,对state数据进行二次计算、筛选、格式化,有缓存;5.modules:模块拆分,解决项目状态过多、文件臃肿的问题,实现模块化管理。完整流程:组件dispatch触发actions=>actions处理异步逻辑=>commit提交mutations=>mutations修改state=>视图响应更新。2.Pinia相比Vuex的优势(Vue3重点)现在Vue3项目基本都用Pinia替代Vuex,优势非常明显:1.简化语法:移除了繁琐的mutations,同步、异步逻辑都可以直接写在actions中,代码更简洁;2.无模块嵌套:天然模块化,无需配置modules,每个仓库独立,引入使用更简单;3.TS支持完美:类型推导更精准,适配大型项目类型校验;4.体积更小、性能更好:去除冗余代码,轻量化设计;5.支持直接修改数据:可以直接修改state,也可封装actions,灵活性更高。六、Vue性能优化面试题(高频实战)1.Vue项目常用性能优化方案结合日常开发,从编码、渲染、打包三个维度优化:1.编码层面优化①频繁切换元素用v-show,不频繁用v-if;②v-for必须加唯一key,避免和v-if同级使用(优先级问题导致性能浪费);③合理使用computed缓存计算结果,减少重复计算;④销毁组件时清除定时器、监听事件、防抖节流函数,防止内存泄漏。2.渲染层面优化①路由懒加载、组件按需引入,减小首屏体积;②长列表虚拟滚动,只渲染可视区域DOM,解决大数据列表卡顿;③图片懒加载,延迟加载非可视区域图片;④合理使用watch,开启deep精准监听,避免全量监听。3.打包层面优化①开启gzip压缩;②第三方依赖按需引入,剔除冗余包;③打包剔除console日志;④静态资源CDN引入,减轻服务器压力。2.为什么v-for和v-if不建议连用?Vue中v-for优先级高于v-if,如果两者连用,会先循环渲染所有元素,再根据条件判断是否隐藏,造成极大的性能浪费。哪怕只需要展示少量元素,也会完整遍历整个数组。解决方案:1.优先通过computed过滤数组,提前筛选好数据再循环;2.外层用template包裹,将v-if放在外层,v-for放在内层,避免无效循环。3.虚拟DOM和diff算法的作用虚拟DOM就是用JS对象模拟真实DOM结构,真实DOM操作开销极大,而JS运算速度快,通过操作虚拟DOM可以减少真实DOM操作。diff算法的作用是对比新旧虚拟DOM的差异,精准找
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-重庆-重庆垃圾清扫与处理工四级(中级工)历年参考题库含答案详解
- 2026人音版音乐四年级上册第三单元-《打字机》-课堂教学设计
- 2026事业单位工勤技能-辽宁-辽宁计算机操作员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-辽宁-辽宁无损探伤工一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-贵州-贵州土建施工人员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-贵州-贵州保育员三级(高级工)历年参考题库含答案详解
- 2026事业单位工勤技能-福建-福建热力运行工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-福建-福建地质勘查员五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-甘肃-甘肃造林管护工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-甘肃-甘肃机械热加工一级(高级技师)历年参考题库含答案详解
- T∕CROAKER 008-2025 大黄鱼鱼苗质量等级评定
- 2025-2026学年北京市文汇中学教育集团九年级(上)期中语文试卷
- 基础化学仪器分析课件
- 2025承插型盘扣式钢管脚手架安全管理要点培训
- DG-TJ08-2144-2025 公路养护工程质量检验评定标准
- 上海市郊野乡村风貌规划设计和建设导则二
- 误伤私了协议书范本
- 生物化学 -第四章 酶
- 2025版中石化石油化工项目可行性研究报告编制规定
- 2024年秋新沪教牛津版英语三年级上册 Unit 5 第1课时 教学课件
- 2024丽泽商务区规划
评论
0/150
提交评论