版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高频面试题及详细答案(实战向、无模板话术)一、Vue基础核心面试题1、说说Vue的核心特性有哪些?Vue核心特性都是开发中高频用到的,主要包含这几点:1)数据双向绑定:视图和数据实时联动,数据变视图自动更新,视图修改也会同步数据,大幅减少DOM操作代码;2)组件化开发:页面拆分成独立、可复用的组件,支持嵌套、传值、复用,方便团队协作和项目维护;3)虚拟DOM:不直接操作真实DOM,通过虚拟DOM对比差异,只更新变化的DOM节点,提升页面渲染性能;4)指令系统:内置v-for、v-if、v-show、v-bind、v-on等指令,快速实现页面渲染、事件绑定等逻辑;5)路由与状态管理:搭配vue-router实现单页应用跳转,vuex/pinia实现全局状态统一管理。2、v-if和v-show的区别?实际项目怎么选择?核心区别:1)渲染原理不同:v-if是真正的销毁和重建DOM,条件为false时,节点直接不存在页面中;v-show只是切换CSS的display属性,节点始终存在,只是隐藏;2)性能消耗不同:v-if切换开销大,初始渲染开销小;v-show初始渲染开销大,切换开销极小;3)支持场景不同:v-if支持组件、标签的条件渲染,可配合v-else、v-else-if使用;v-show不支持模板标签,也不能和v-else联动。项目使用原则:页面频繁切换显示隐藏的元素,用v-show;页面一次性判断、很少切换(比如权限控制、首次加载判断),用v-if。3、Vue中key的作用是什么?为什么不建议用index做key?key的作用:key是虚拟DOM节点的唯一标识,用于diff算法精准对比新旧节点,快速定位差异、复用DOM节点,避免列表渲染错乱、数据叠加问题。不建议用index做key的原因:当列表进行删除、插入、排序操作时,数组索引会发生变化。此时diff算法会错误复用旧DOM节点,导致列表数据错乱、复选框选中状态紊乱、渲染数据不匹配等问题。实际开发中优先使用后端返回的唯一id作为key。4、Vue数据双向绑定的原理是什么?Vue2和Vue3有什么区别?Vue2双向绑定原理:基于Object.defineProperty()劫持对象的属性,监听数据的读取和修改。数据修改时触发更新,驱动视图渲染;视图修改时同步更新数据。存在缺陷:无法监听对象新增/删除属性、数组下标修改、数组长度修改,需要借助$set、$delete或者重写数组方法实现响应式。Vue3双向绑定原理:基于ES6Proxy代理整个对象,直接拦截对象的读取、修改、新增、删除、数组变更等所有操作。优势:解决了Vue2的响应式缺陷,支持所有数据变更场景,响应式范围更广、性能更好,同时搭配Reflect优化了返回值处理。二、Vue组件通信面试题(高频)1、Vue常用的组件通信方式有哪些?分别适用什么场景?1)父子组件通信父传子:props传值,适合父组件向子组件传递静态/动态数据;子传父:$emit触发自定义事件,子组件向父组件传递数据、触发父组件方法;父子互访:$parent、$children、ref,适合直接调用组件方法、获取组件实例。2)跨级/深层组件通信provide/inject:祖先组件向所有后代组件传值,无需逐层传递,适合全局静态配置、主题、权限等数据;3)任意组件通信事件总线(bus):适合小型项目简单跨组件通信,中大型项目不推荐,容易事件混乱;Pinia/Vuex:全局状态管理,适合中大型项目,统一管理全局共享数据(用户信息、菜单、全局配置);4)兄弟组件通信:通过父组件中转、bus、全局状态管理均可实现。2、props传值的特点?如何限制props类型和校验?1)props是单向数据流,子组件不能直接修改父组件传递的props值,修改会报警告,数据只能由父组件更新向下传递;2)支持类型校验、默认值、必填校验、自定义校验规则,极大提升项目稳定性;3)props数据是只读的,子组件如需修改,建议拷贝一份数据再操作。标准校验写法:PlainText
props:{
name:{
type:String,//限定类型
required:true,//是否必填
default:''//默认值
},
age:{
type:Number,
validator:(val)=>val>0//自定义校验规则
}
}3、provide和inject的优缺点是什么?项目中怎么用?优点:无需逐层props传值,简化深层组件传值逻辑,代码简洁;缺点:数据响应式处理麻烦,默认注入数据不是响应式,且数据来源不清晰,后期维护难;使用场景:适合传递全局不变的静态数据(主题色、系统配置),如需响应式数据,搭配ref/reactive使用,不建议用来频繁更新业务数据。三、Vue生命周期面试题1、说说Vue常用生命周期钩子及实际用途生命周期是组件从创建、挂载、更新到销毁的完整过程,常用钩子如下:1)created:组件实例创建完成,数据、方法已初始化,未挂载DOM。常用作页面初始请求接口、初始化数据;2)mounted:DOM挂载完成,页面渲染完毕。常用作操作DOM、初始化定时器、监听DOM事件、加载第三方插件;3)updated:数据更新后DOM重新渲染完成,可获取最新DOM结构;4)unmounted:组件销毁完成。主要用来清除定时器、移除事件监听、取消接口请求,防止内存泄漏;5)beforeCreate、beforeMount:几乎不用,仅做前置拦截处理。2、为什么定时器、事件监听要在unmounted中清除?组件切换销毁后,如果定时器、全局事件监听未清除,会继续在后台执行。不仅会造成内存泄漏,还会出现组件销毁后依然请求接口、修改变量的报错,严重影响页面性能和稳定性,是项目开发必须遵守的规范。四、Vue路由面试题(vue-router)1、vue-router路由模式有几种?区别是什么?两种模式:hash模式、history模式hash模式(默认):1)地址带#号,不美观;2)基于浏览器hash变化,改变路由不会触发页面刷新;3)兼容性极好,无需后端配置,本地直接打开页面可正常访问。history模式:1)地址无#,简洁美观,符合常规网址规范;2)基于HTML5historyAPI;3)刷新页面会404,必须后端配置重定向,将所有请求指向index.html。2、路由守卫有哪些?全局守卫和独享守卫的使用场景1)全局守卫:router.beforeEach全局前置守卫,所有路由跳转都会触发,最常用。主要做全局登录拦截、权限校验、页面标题修改、路由跳转拦截;2)路由独享守卫:单个路由配置beforeEnter,只对当前路由生效。适合个别页面单独权限校验,比如专属后台页面、付费页面拦截;3)组件内守卫:组件内部的路由钩子,极少使用。3、路由懒加载的作用和写法作用:打包时将路由对应的组件单独打包成独立js文件,页面初始加载只加载首页资源,跳转对应路由时才加载对应组件资源,减小首屏加载体积、提升首屏渲染速度,优化项目打包性能。常用写法:PlainText
//静态导入(不推荐大项目使用)
importHomefrom'@/views/Home.vue'
//懒加载导入
constHome=()=>import('@/views/Home.vue')五、Vue状态管理(Pinia/Vuex)1、Pinia相比Vuex的优势?现在项目为什么优先用Pinia?1)简化语法:去除了Vuex繁琐的mutations,直接在actions中修改数据,代码更简洁;2)无需嵌套模块:每个仓库独立,天然模块化,不用配置namespaced;3)支持TS更好:类型推导更精准,适配大型项目;4)无需固定格式:写法自由,上手成本低,同时保留持久化、调试工具等功能;目前Vue3项目基本全部使用Pinia,Vuex仅用于老旧Vue2项目维护。六、Vue性能优化实战面试题1、日常开发中,Vue页面性能优化的常用手段1)渲染优化:长列表使用虚拟列表,避免v-for高频渲染;v-for必须加key,同时避免v-for和v-if同级使用;2)加载优化:路由懒加载、组件懒加载、图片懒加载;3)计算与监听优化:复杂逻辑用computed缓存,避免模板写复杂表达式;合理使用watch,开启immediate、deep按需监听;4)事件与内存优化:组件销毁清除定时器、事件监听、请求取消;5)打包优化:去除冗余依赖、开启gzip压缩、按需引入UI组件库;6)防抖节流:搜索输入、窗口缩放、滚动监听等高频事件加防抖节流。2、为什么v-for和v-if不建议同级使用?Vue编译优先级中,v-for优先级高于v-if。如果同级书写,会先循环渲染所有节点,再根据条件判断销毁节点,造成无效循环、浪费性能。优化方案:1)条件控制整个列表是否渲染,将v-if写在外层标签;2)条件控制单条数据,提前在数组中过滤数据,再进行v-for循环。七、Vue3专项高频面试题1、setup函数的特点?执行时机是什么时候?1)setup是Vue3组合式API的核心入口,组件创建前执行,在beforeCreate之前执行;2)setup执行时,组件this尚未创建,所以setup内无法使用this;3)内部定义的变量、方法需要return暴露出去,模板才能使用;4)支持参数props、context,用于接收父组件参数、触发事件。2、ref和reactive的区别?如何选择使用?ref:1)用于定义基本数据类型(字符串、数字、布尔),也可定义引用类型;2)数据会包裹在value属性中,脚本中修改需要.value,模板中无需书写;reactive:1)专门用于定义对象、数组等引用类型数据;2)直接解构使用,无需.value,响应式基于Proxy;使用原则:基础类型用ref,复杂对象、数组用reactive。3、computed和watch的区别和使用场景1)computed:计算属性,依赖缓存,依赖值不变则不会重复执行;适合多数据联动、复杂计算、模板简化逻辑,纯计算逻辑,不处理异步;2)watch:监听数据变化,无缓存,数据变化就触发;适合数据变化后执行异步操作、复杂业务逻辑(接口请求、定时器、多逻辑处理)。八、实战报错与难点面试题1、Vue中数据更新但页面不渲染的原因及解决办法1)Vue2响应式缺陷:新增对象属性、修改数组下标/长度,无法触发响应式;解决:使用$set、或者直接替换整个对象/数组;2)异步更新数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防物联网升级工程监理规划
- 职业教育实训基地工程施工组织设计
- 线缆项目环境影响报告书
- 音响系统器件项目申请报告
- 微生物遗传与育种实验教学设计
- 微生物种质资源鉴定技术方案
- 微生物细胞工厂设计方案
- 药分吸收系数
- 皮癣护理查房
- 护理临床用药安全管理
- 以“麦”相传-麦秆画
- 2025年金字塔原理试卷及答案
- 《小学科学课程标准》(修订稿)
- 西藏酥油茶的课件
- 2026上海电力股份有限公司校园招聘笔试备考题库及答案解析
- 国开2025年秋《农业推广》形成性考核1-3答案
- 冬季矿山五防安全培训课件
- 小儿推拿进修总结汇报
- 2025年上海市公务员《行政职业能力测验(B卷)》试题(网友回忆版)
- 向往混声合唱谱【简谱】
- 解码国家安全-知到答案、智慧树答案
评论
0/150
提交评论