- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Vue面试题大全及答案
一、Vue基础概念
Vue响应式原理是什么?Vue2和Vue3有什么区别?
答案:Vue的响应式是指数据变化时视图自动更新。
Vue2用Object.defineProperty劫持对象属性的get/set,但有局限:无法监听数组索引修改、对象新增属性;
Vue3改用ES6Proxy代理整个对象,能监听数组变化、对象新增/删除属性,还支持Map/Set等数据结构;
实际开发注意:Vue2中数组需用this.$set或数组方法(push/splice)触发更新,Vue3无此问题。
v-model是怎么实现的?Vue2和Vue3的v-model有差异吗?
答案:v-model是语法糖,本质是v-bind:value+v-on:input。
Vue2中:组件用v-model时,默认接收valueprops,触发input事件;若想自定义,需用model选项(如model:{prop:num,event:change});
Vue3中:取消model选项,直接通过v-model:自定义属性绑定(如子组件defineProps([count]),父组件v-model:count=num),支持多v-model绑定;
例子:自定义输入框组件,Vue3可写为MyInputv-model:value=msgv-model:disabled=isDisabled/。
computed和watch的区别?分别用在什么场景?
答案:
computed:依赖响应式数据,有缓存(依赖不变则不重新计算),只能同步计算,适合“根据已有数据生成新数据”(如购物车总价计算computed:{total(){returnthis.goods.reduce((sum,item)=sum+item.price,0)}});
watch:监听数据变化,无缓存,支持异步操作,适合“数据变化后执行副作用”(如监听用户ID变化,请求用户信息:watch:{userId(newVal){this.fetchUserInfo(newVal)}});
注意:computed不能直接修改,watch可通过immediate:true实现初始执行。
二、Vue组件核心
组件间通信有哪些方式?分别适合什么场景?
答案:
父传子:props(适合简单数据,如Child:name=username/);
子传父:$emit(适合子组件触发父组件事件,如子组件this.$emit(change,newVal),父组件Child@change=handleChange/);
兄弟组件:EventBus(Vue2用newVue(),Vue3用mitt库,适合小型项目)、Pinia/Vuex(大型项目);
深层组件:provide/inject(适合跨层级传递(如主题、权限),父组件provide(theme,dark),子组件inject(theme),注意不推荐用于频繁变化的数据);
任意组件:Pinia/Vuex(统一管理状态,如用户信息、购物车)。
组件复用的方式有哪些?混入(mixin)和组合式API(CompositionAPI)的区别?
答案:复用方式:混入(mixin)、组合式API、自定义hooks。
混入(mixin)缺点:命名冲突(多个mixin有相同方法会覆盖)、数据来源不明确(难以追溯数据来自哪个mixin)、不支持TypeScript;
组合式API优点:通过函数封装逻辑(如useRequest、useCart),数据来源清晰,支持TypeScript,可灵活组合(如在setup中调用多个自定义hooks);
例子:封装请求逻辑,用自定义hooksfunctionuseFetch(url){constdata=ref(null);constload=async()={data.value=awaitaxios.get(url)};return{data,load}},组件中直接调用。
v-for为什么要加key?key的作用是什么?
答案:key是虚拟DOM的唯一标识,用于Vue的diff算法对比节点。
不加key:Vue会用“就地复用”策略,可能导致DOM更新错误(如列表勾选框错位);
加key:diff时通过key快速找到相同节点,只更新变化的节点,提高性能,避免错误;
注意:key不能用index(若列表有删除/排序操作,index会变化,导致key失效),推荐
文档评论(0)