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

下载本文档

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

文档简介

VueJS高频面试题及详细答案(实战版)一、Vue基础核心面试题1.说说你对Vue渐进式框架的理解?Vue是渐进式JavaScript框架,核心特点就是按需引入、灵活适配,没有强侵入性。简单来说:可以只用来做页面简单的数据渲染,替代jQuery,轻量化使用;需要复杂功能时,可以逐步引入组件化、路由、状态管理、工程化工具;既适合小型页面开发,也能支撑大型单页应用,开发者可以根据项目规模自由选择使用程度,学习成本和项目成本可控。2.Vue2和Vue3的核心区别有哪些?结合日常开发,最核心的区别集中在底层原理、API、性能、工程化几个方面:响应式原理不同:Vue2基于Object.defineProperty,只能监听对象已有属性,无法监听新增、删除属性和数组下标、长度变化;Vue3基于Proxy,直接劫持整个对象,支持全量监听,无需$set方法。编程方式不同:Vue2以Options选项式API为主,代码按选项拆分,复杂业务逻辑分散;Vue3支持组合式API(setup),可按业务逻辑聚合代码,复用性更强。性能优化:Vue3新增虚拟DOM优化、静态节点提升、PatchFlag标记,diff算法效率大幅提升;同时打包体积更小,运行速度更快。类型支持:Vue3源码使用TS重写,天然支持类型校验,大型项目更稳定;Vue2对TS支持较弱。生命周期:组合式API生命周期名称略有调整,移除了beforeCreate、created,统一在setup中编写。3.Vue中data为什么必须是一个函数?这个问题只针对组件,根实例的data可以是对象。组件复用的时候,如果data是一个对象,所有组件实例会共用同一个对象引用,一个组件修改数据,其他复用组件的数据都会被污染。而data写成函数,每次创建组件实例都会返回一个全新的独立对象,每个组件的数据相互独立,不会互相影响。4.v-if和v-show的区别及使用场景?实现原理:v-if是真正的条件渲染,条件不成立时直接销毁DOM,成立时重新创建DOM;v-show只是切换CSS的display属性,DOM始终存在。性能消耗:v-if切换开销大,初始渲染开销小;v-show初始渲染开销大,频繁切换开销小。使用场景:页面元素显示/隐藏频率极低,用v-if;需要频繁切换显示状态(如弹窗、开关),用v-show。5.v-for为什么必须绑定key?key为什么不推荐用index?key是Vue虚拟DOMdiff算法的唯一标识,作用是帮助diff算法精准识别节点,避免错误复用DOM,提升渲染效率。不推荐用index作为key的原因:数组进行删除、插入、排序操作时,数组下标会重新排序;index变化会导致Vue误判节点身份,错误复用DOM,引发数据错乱、表单输入值混乱、样式错乱等问题;最优方案是使用后端返回的唯一ID作为key。二、Vue响应式原理核心题1.详细说一下Vue2响应式原理及缺陷?Vue2核心响应式原理是数据劫持+发布订阅模式。通过Object.defineProperty劫持data中数据的get和set方法:数据读取时(get):收集当前组件的依赖(Watcher);数据修改时(set):触发对应Watcher更新,更新视图。存在的缺陷:无法监听对象新增、删除属性,所以需要$set、$delete;无法监听数组下标修改、数组长度修改,只能重写数组7个变异方法(push/pop/shift/unshift/splice/sort/reverse)实现监听;只能对单层数据劫持,深层数据需要递归遍历,初始化性能开销大。2.Vue3Proxy响应式的优势?Proxy是对整个对象进行劫持,不是劫持单个属性,天然支持监听属性新增、删除、数组下标和长度变化,不再需要$set;支持监听Map、Set、Symbol等新数据类型;懒递归劫持,只对当前访问的属性进行响应式处理,初始化性能比Vue2更好;可拦截的操作更多,包括读取、修改、删除、遍历等,覆盖全场景数据操作。3.Vue中computed和watch的区别和使用场景?区别:原理不同:computed是计算属性,有缓存,依赖值不变时,多次读取不会重新计算;watch是监听函数,无缓存,数据变化就会触发执行。数据流向:computed是多对一,多个依赖数据生成一个新值;watch是一对一,监听一个数据变化执行逻辑。同步异步:computed必须是同步;watch支持异步操作。使用场景:简单数据计算、数据二次加工、需要复用缓存值,用computed;数据变化后执行异步请求、复杂业务逻辑、定时器、DOM操作,用watch。三、组件通信高频面试题1.Vue常用的组件通信方式有哪些?结合实际开发常用场景,分为6种核心方式:父子通信:父传子props,子传父$emit;兄弟/跨级简单通信:事件总线bus(小型项目);跨层级深层通信:provide/inject;全局状态通信:Vuex(Vue2)/Pinia(Vue3);父子直接获取实例:$parent/$children/ref;属性透传:attrs/listeners。2.props如何校验?props传参的注意事项?Vue支持对props进行类型、必填、默认值、自定义校验规则校验,规范子组件接收的数据,避免传参错误。示例:javascript

props:{

name:{

type:String,

required:true,

default:'',

validator:(val)=>val.length<20

}

}注意事项:props是单向数据流,子组件不能直接修改props值,会报错;复杂类型(对象、数组)的default必须写成函数返回,避免引用污染;尽量做好类型和必填校验,提升项目可维护性。3.provide/inject的优缺点和使用场景?provide由祖先组件提供数据,inject由后代组件注入数据,支持跨任意层级传参。优点:解决多层嵌套组件层层透传props的繁琐问题,简化跨级通信。缺点:数据来源不清晰,嵌套层级多的时候难以定位数据来自哪个父组件;不适合频繁更新的全局数据,状态不可控。场景:适合全局静态配置、主题色、布局配置、用户信息等更新频率低的全局数据。四、Vue路由面试题1.vue-router路由模式hash和history的区别?hash模式:地址带#号,基于浏览器hash事件,改变hash不会触发页面刷新,兼容性最好;后端无需配置,部署简单。history模式:地址干净无#,基于HTML5historyAPI;需要后端配置重定向,否则刷新页面会404。生产项目正式上线一般用history模式,体验更好;静态部署、简单项目可用hash模式。2.路由守卫有哪些?全局守卫执行顺序?常用路由守卫分为三类:全局守卫:beforeEach(全局前置)、afterEach(全局后置)路由独享守卫:beforeEnter组件内守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave完整执行顺序:全局前置beforeEach=>路由独享beforeEnter=>组件内beforeRouteEnter=>路由跳转=>全局后置afterEach3.路由跳转报错Avoidedredundantnavigationtocurrentlocation怎么解决?报错原因:重复跳转到当前路由,路由不允许重复导航。解决方案:重写路由push/replace方法,捕获异常,是项目通用写法:javascript

constoriginalPush=VueRtotype.push

VueRtotype.push=functionpush(location){

returnoriginalPush.call(this,location).catch(err=>err)

}五、Vue状态管理(Vuex/Pinia)1.Vuex的核心流程和四大核心属性?四大核心:state、mutations、actions、gettersstate:全局状态数据源;mutations:唯一修改state的方式,同步执行;actions:处理异步逻辑、复杂业务逻辑,通过commit调用mutations修改state;getters:类似于computed,对state数据二次加工,带缓存。完整流程:组件dispatch触发actions=>actionscommit触发mutations=>mutations修改state=>视图响应更新。2.Pinia相比Vuex的优势?去除了繁琐的mutations,直接在actions中修改数据,代码更简洁;天然支持TS,类型推导更友好;模块扁平化,无需嵌套modules,访问数据更简单;支持自动模块化,无需手动注册;调试工具更轻便,适配Vue3完整生态。六、Vue工程化与性能优化1.Vue项目常见的性能优化手段?从开发、打包、渲染三个维度总结实战优化点:1.编码优化合理使用v-if/v-show,避免无效渲染;v-for必须加key,避免和v-if同级使用;长列表使用虚拟滚动,减少DOM节点数量;频繁触发的事件(resize、scroll)做防抖节流。2.组件优化使用组件懒加载、路由懒加载,减小首屏加载体积;合理使用computed缓存计算结果,减少重复计算;Vue3使用shallowRef、shallowReactive做浅层响应式,减少监听开销。3.打包优化开启Gzip压缩、代码压缩、Tree-Shaking;大文件、第三方库CDN引入,减小打包体积;拆分chunk,分离公共代码和业务代码。2.什么是虚拟DOM?为什么要用虚拟DOM?虚拟DOM是用JS对象模拟真实DOM结构,是对真实DOM的抽象描述。优势:真实DOM操作开销极大,JS计算速度远快于DOM操作;通过diff算法对比新旧虚拟DOM,只更新差异节点,减少DOM操作次数;实现跨平台渲染,适配Web、小程序、App多端场景。七、Vue高频坑点&面试压轴题1.说说Vue的异步更新机制?$nextTick的作用?Vue视图更新是异步批量更新的。当数据发生变化时,Vue不会立刻更新DOM,而是将更新缓存到队列中,等待同一事件循环的所有数据修改完成后,再统一更新视图,避免频繁DOM操作造成性能浪费。$nextTick的作用:在DOM更新完成后执行回调函数。开发中常用于:数据修改后,立即获取更新后的DOM元素、DOM尺寸、执行DOM操作。2.组件的生命周期及每个阶段的使用场景?生命周期核心分为:创建、挂载、更新、销毁四个阶段,常用钩子:created:实例创建完成,数据、方法已初始化,DOM未生成,可发首次请求、初始化数据;mounted:DOM挂载完成,页面渲染完毕,可

温馨提示

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

评论

0/150

提交评论