版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高频面试题及详细答案(实战口语版)一、Vue基础核心面试题1、说说你对Vue的理解?Vue有哪些核心特性?Vue是一套轻量级、渐进式的前端MVVM框架,核心是数据驱动视图、组件化开发,上手简单、灵活性高,既可以开发小型页面,也能搭建大型单页应用。核心特性主要有这几点:数据双向绑定:通过响应式系统,数据变化自动更新视图,视图修改也能同步数据,不用手动操作DOM;组件化:把页面拆分成独立、可复用的组件,各司其职,方便维护和复用;虚拟DOM:通过虚拟节点对比差异,精准更新页面,减少DOM操作,提升渲染性能;指令系统:内置v-for、v-if、v-bind、v-on等指令,简化DOM操作逻辑;路由与状态管理:搭配vue-router实现单页跳转,vuex/pinia管理全局状态;生命周期:组件从创建到销毁的完整流程,方便我们在对应阶段处理业务逻辑。2、MVVM和MVC的区别是什么?Vue为什么是MVVM?MVC是模型、视图、控制器,核心是控制器调度,视图和模型不直接通信,所有交互都要经过控制器,代码耦合度偏高,DOM操作较多。MVVM是模型、视图、视图模型,核心是双向数据绑定:Model:纯数据层,就是我们定义的变量、接口返回的数据;View:页面视图,也就是模板DOM;ViewModel:中间桥梁,也就是Vue实例,负责监听数据变化、更新视图,监听视图操作、同步数据。Vue符合MVVM模式,因为我们开发时几乎不用手动操作DOM,只需要修改数据,视图自动更新,完全实现了视图和数据的解耦。3、v-if和v-show的区别?实际项目怎么选择?两者都是控制元素显示隐藏,核心差异在渲染机制和性能场景:v-if:是真正的条件渲染,条件为false时,元素直接销毁、不渲染DOM;条件为true时重新创建渲染。切换开销大,初始渲染开销小;v-show:只是通过CSS的display属性控制显示隐藏,DOM始终存在页面中。切换开销小,初始渲染开销稍大。项目选型规则:页面元素切换频率极低,比如权限判断、弹窗首次渲染,用v-if;页面元素频繁切换显示隐藏,比如tab切换、按钮状态切换,用v-show;如果是多级嵌套判断,优先用v-if,减少无用DOM渲染。4、v-for为什么要加key?key能不能用index?Vue渲染列表时会用虚拟DOMdiff算法对比新旧节点,key是节点的唯一标识,作用是精准识别新旧节点,避免列表复用出错,提升diff效率。不推荐用index作为key,弊端很明显:当列表进行删除、插入、排序操作时,数组index会重新排列,导致原本的节点key发生错乱。Vue会错误复用DOM节点,出现数据和视图不匹配、表单输入数据错乱、高亮错位等问题。最优方案:用后端返回的唯一ID作为key,稳定且准确。如果是静态、不会增删排序的简单列表,index可以临时使用,无负面影响。5、Vue生命周期有哪些?常用生命周期分别用来做什么?Vue2生命周期分为四大阶段、八个钩子,日常开发常用的就五个:beforeCreate:实例刚创建,数据和DOM都没初始化,几乎不用;created(高频):数据、方法已经初始化完成,DOM未生成。适合请求接口数据、初始化全局变量、监听事件;beforeMount:模板编译完成,即将挂载到页面,很少用;mounted(高频):DOM挂载完成,页面渲染完毕。适合操作DOM、初始化图表、开启定时器、监听DOM事件;beforeUpdate:数据更新后,视图重新渲染前触发;updated:视图更新完成,可获取最新DOM;beforeDestroy(高频):组件销毁前触发,用来清除定时器、解绑事件、取消接口请求,防止内存泄漏;destroyed:组件完全销毁,资源释放完成。Vue3生命周期逻辑基本一致,只是组合式API写法名称略有变化。二、Vue响应式原理核心题1、说说Vue2和Vue3响应式原理的区别?Vue2响应式原理:基于Object.defineProperty劫持对象的get、set方法。缺陷很明显:无法监听对象新增、删除属性,需要用Vue.set/this.$set处理;无法监听数组下标修改、数组长度修改,只能重写数组七个变异方法实现监听;只能劫持对象已有属性,对嵌套对象需要递归遍历,初始化性能较差。Vue3响应式原理:基于Proxy代理整个对象。优势:直接代理整个对象,支持监听属性新增、删除、数组下标和长度修改;支持Map、Set等复杂数据类型;懒递归,只在访问对应属性时才进行深层监听,优化初始化性能。2、Vue2中为什么要用$set?原理是什么?因为Vue2的Object.defineProperty只能劫持对象已存在的属性,后续新增的属性没有get/set劫持,Vue无法监听变化,导致数据更新了视图不更新。$set的核心原理:手动给新增属性添加响应式劫持,同时触发视图更新,让新增属性具备响应式能力。另外$set还能处理数组下标修改、数组长度修改不更新视图的问题。3、Vue数据更新是同步的,视图更新是异步的?为什么?是的,Vue中数据修改是同步执行,DOM更新是异步批量更新。核心原因:提升渲染性能。如果每次修改数据都立刻更新DOM,频繁操作DOM会造成极大的性能损耗。Vue的处理机制:当数据发生变化时,Vue会把更新操作缓存到队列中,同一事件循环内的所有数据变更会合并,等当前事件循环结束后,再一次性更新视图。如果需要立刻获取更新后的DOM数据,可以用$nextTick,它会在DOM更新完成后执行回调。三、组件通信高频面试题1、Vue常用的组件通信方式有哪些?分别适用什么场景?日常开发最常用7种,覆盖所有场景:父子传值(父传子):props。最基础的父子通信,父组件向子组件传递静态/动态数据;子传父:$emit自定义事件。子组件触发事件,携带参数传给父组件;兄弟组件通信:事件总线bus(小型项目)、vuex/pinia(中大型项目);祖孙/跨层级通信:provide/inject。上层组件提供数据,任意下层组件直接注入使用,无需逐层传参;全局状态通信:Vuex/Pinia。全局通用状态,比如用户信息、主题、全局配置,任意组件均可读写;直接获取组件实例:$parent/$children/ref。ref可以直接获取子组件实例,调用子组件方法、获取数据;属性透传:$attrs。父组件属性不通过props接收,直接透传给深层子组件。2、props传值是同步还是异步?能不能直接修改props?props数据传递是同步的,父组件数据更新,子组件立刻接收最新值。绝对不能直接修改props:Vue规范中props是单向数据流,子组件无权修改父组件传过来的数据。直接修改会报错,且会导致父子数据状态混乱,难以维护。正确处理方式:仅展示:直接使用即可;需要修改:在子组件内部定义data或computed,接收props值,修改内部变量;需要同步更新父组件:通过$emit触发事件,让父组件自己修改数据。3、说说provide和inject的使用场景和优缺点provide和inject是Vue提供的跨层级传值方案,上层组件用provide提供数据,所有后代组件都可以用inject注入使用,不用逐层props传递。优点:解决多层级组件props层层透传的繁琐代码,简化跨层级通信;缺点:数据溯源困难,后代组件不知道数据来自哪个上层组件,维护性差;默认是非响应式的,需要主动处理才能实现数据联动更新。适用场景:全局通用配置、主题色、布局配置、权限信息等低频修改的全局数据。四、Vue路由面试题1、vue-router路由模式有几种?区别是什么?两种模式:hash模式、history模式。hash模式(默认):地址带#号,比如/#/home;基于浏览器hashchange事件,hash变化不会刷新页面;兼容性好,无需后端配置,部署简单。history模式:地址干净无#,和传统网页地址一致;基于HTML5history.pushState实现;刷新页面会404,需要后端配置重定向,将所有请求指向index.html。2、路由跳转$router和$route的区别?$router:是路由实例对象,全局唯一,用来做路由跳转、编程式导航。常用方法:push、replace、go、back;$route:是当前路由信息对象,每个页面独有,用来获取当前路由参数。常用属性:path、name、query、params、meta。3、路由守卫有哪些?全局守卫执行顺序?路由守卫主要用来做权限控制、登录拦截、页面跳转校验:常用守卫分类:全局守卫:beforeEach(全局前置)、afterEach(全局后置);路由独享守卫:beforeEnter;组件内守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave。完整执行顺序:全局前置beforeEach→路由独享beforeEnter→组件内beforeRouteEnter→路由跳转完成→全局后置afterEach。五、Vuex/Pinia状态管理1、Vuex的核心属性和执行流程?Vuex五个核心:state、getters、mutations、actions、modules。state:全局数据源,存放所有全局状态;getters:类似于计算属性,对state数据二次处理、筛选、计算,缓存结果;mutations:唯一修改state的方式,同步执行,用于修改数据;actions:异步操作,比如接口请求、延时操作,内部通过commit调用mutations修改数据;modules:模块拆分,解决state集中臃肿问题,实现状态模块化管理。执行流程:组件dispatch触发actions→actionscommit触发mutations→mutations修改state→state更新→视图更新。2、为什么mutations必须是同步?actions处理异步?核心原因是状态追踪调试。Vuex依赖mutation记录每一次状态变更,如果mutations存在异步,开发者工具无法精准追踪数据变化顺序,导致调试混乱,无法定位问题。所以统一规范:异步逻辑(请求接口、定时器)统一放actions,纯数据修改放mutations。3、Pinia相比Vuex的优势?现在项目为什么多用Pinia?Pinia是Vue官方推荐的新一代状态管理,解决了Vuex的很多痛点,优势如下:去除了繁琐的mutations,直接在actions中修改数据,支持同步异步,代码更简洁;无需嵌套模块,每个仓库独立,天然模块化,结构清晰;完美适配TS,类型推导更精准;支持按需引入,体积更小,上手成本极低;去掉了Vuex严格模式的各种限制,开发效率更高。六、Vue性能优化面试题(实战高频)1、日常开发中,Vue性能优化的手段有哪些?我从编译、渲染、更新、打包四个维度总结常用优化:1、渲染优化频繁切换用v-show,条件渲染用v-if,避免无效渲染;列表渲染精准绑定唯一key,避免index引发渲染错乱;长列表优化:虚拟列表、分页加载,避免一次性渲染大量DOM。2、数据优化避免冗余响应式数据,静态数据无需响应式;合理使用computed缓存计算结果,减少重复计算;销毁组件时清除定时器、解绑事件,防止内存泄漏。3、打包优化路由懒加载、组件懒加载,减少首屏打包体积;第三方库按需引入,剔除无用代码;开启gzip压缩、图片压缩,优化静态资源。4、更新优化合理使用$nextTick批量处理DOM操作;避免在模板中写复杂逻辑,统一放到computed或methods。2、Vue怎么避免内存泄漏?项目中常见内存泄漏场景和解决方式:定时器/延时器:在beforeDestroy中clear清除;全局事件监听、DOM事件监听:组件销毁时解绑;异步请求未取消:组件销毁前取消pending状态的接口请求;全局变量、闭包残留:避免组件内滥用全局变量,及时释放引用。七、Vue3高频面试题1、Vue3组合式API和Vue2选项式API的区别?选项式API(Vue2):按照功能分类代码,data、methods、watch、生命周期分开写,简单页面清晰,但大型项目中,同一个业务逻辑会分散在各个模块,代码碎片化,维护困难。组合式API(Vue3):按照业务逻辑聚合代码,同一个功能的变量、方法、监听、生命周期写在一起,支持代码抽离复用,适合大型复杂项目。简单说:小项目用选项式API快速开发,大项目用组合式API方便维护和复用。2、ref和reacti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 表格游戏本课件
- 表格管理课件
- 办公OA 介绍课件
- 2026年特斯拉招聘模拟试卷带答案
- 2026年实习律师培训模拟试卷带答案
- 2026年模特经济模拟试卷及参考答案
- 招投标管理考试题库及参考答案
- 2026年冬季换季模拟试卷(含答案)
- 2026年采集痰标本模拟试题(含答案)
- 2026年导游实务单元模拟试题(含答案)
- 贵州省公路占道作业安全技术指南(试行)
- 头发移植课件
- 《深度学习与神经网络》全套教学课件
- GB/T 9535.2-2025地面用光伏组件设计鉴定和定型第2部分:试验程序
- 煤矿安全生产风险分级管控和隐患排查治理双重预防体系建设培训课件
- 全国民用爆炸物品信息管理系统领用发放手持机用户手册
- Colles骨折课件教学课件
- 委托检测服务合同协议书
- 长期总代理协议书范本
- 大学生职业规划大赛成长赛道
- NB-T+33008.1-2018电动汽车充电设备检验试验规范 第1部分:非车载充电机
评论
0/150
提交评论