本文会列出一些面试时经常会问到的问题和答案,并说明面试官在面试时对对方的期望是什么他问了这个问题回答:vue生命周期(钩子函数)问题,请说说vue的生命周期函数(钩子函数)。问题描述首先是关于生命周期函数。一般来说,我的第一个问题是这个。我想用过vue的人应该都清楚。如果这个问题的答案是一个大问题,我真的不想继续了。.就算英文不标准(我不是标准人,不是说这是个问题),也要分清重点,哪些地方有ed,哪些地方没有ed其实很重要,或者可以手写下来,因为常用的是create和mount,所以前4个手写不难,后面4个不详细解释也没关系。(我在自己的工作中基本没用过后4个。)在哪个周期可以第一次获取data数据,在哪个周期可以第一次获取mounted中的dom元素。如果不提这个问题,我通常会一直问,直到他说出这两个答案。预期答案beforeCreate,created(此时需要说明的是data中定义的数据在created中可以第一次获取到),beforeMount,mounted(此时需要说明的是dom树渲染完成了,可以访问dom结构了),beforeUpdate,updated,beforeDestroy,destroyedcomputed中getter和setter的问题说说computed中的getter和setter。这个问题描述了很多情况。当我问这个问题时,对方的回答都是关于Vue的getter和setter,以及订阅者模型。我就直接说问题不是这个,而是computed,让对方说computedusually怎么用。大多数时候,我得到的答案是默认的计算方法。我只用了里面的getter,如果想把这个值设回去,我会继续问怎么办。当然,这种级别的问题,他是答不上来的。预期答案watchlistenerobjectquestionwatch如何监听对象内部的变化。问题描述我觉得这个问题是一个不应该回答的问题,但是我遇到的大部分人并没有给出我期望的答案。有的人会说直接监控obj,更好的人会说点击直接监控obj.key,但是很少有人回答deep。一开始我会问immediate,但是不知道的人太多,所以我只问了listener。只有回答deep的人才会问immediate的作用。期待答案如果只监听obj中某个属性的变化,直接监听obj.key即可。如果深度监控整个obj,immediate的效果:第一次绑定value的时候不会触发watch监控,第一次绑定value的时候可以执行immediate。v-for循环中key的作用问题为什么v-for循环的时候需要加key。问题描述问这个问题的时候,很多人首先回答是页面上有警告,编辑器里有提示。我会直接说不考虑报错和提示的问题,或者我会问如果不加key,会出现页面吗?多么不寻常的情况。有人会说,它是一个标识符,用来标识它的唯一性。我会继续问为什么要标识唯一性,不加怎么办?预料之中的答案是vue的DOM渲染是虚拟dom。当数据发生变化时,diff算法只会比较变化的部分。如果数据项的顺序发生变化,Vue不会移动DOM元素来匹配数据项的变化,而只是简单地重用它们。这里的每个元素,并确保它显示已在特定索引处呈现的每个元素。例如:有一个列表,我们现在在中间插入一个元素。diff算法默认会重用之前的列表,并在末尾追加一个。如果列表有选中状态,会出现绑定错误,重用时会出现绑定错误,而不是跟随原来的元素,key的函数可以给他一个标识,这样就可以根据数据来渲染状态。$nextTickquestion你用过$nextTick吗?它的作用是什么?问题描述问到这个问题,很多人会说它可以处理异步,但是接着问为什么要用nextTick,它解决什么问题,不用它会发生什么。期待在下一个DOM更新周期完成后执行延迟回调的答案。修改数据后立即使用此方法获取更新后的DOM。(官网解释)待解决问题:有时更改数据后需要立即操作dom。此时获取的dom还是数据刷新前的dom,不能满足需求。这时候就用到了$nextTick。$setQuestion你在vue中用过$set吗,为什么用,解决什么问题问题描述知道这个问题的人基本上都能说出来,不知道的根本就不懂,而且有的会讲es6的set结构期望的答案是给响应式对象增加一个属性,并保证这个新属性也是响应式的,并触发视图更新。一定要用来给响应式对象添加新的属性,因为Vue无法检测到普通的新属性(比如this.myObject.newProperty='hi')(官方例子)我自己的理解是,一个对象在vue中进行一些内部修改的时候made,Vue不监听变化,不能触发视图的更新。此时使用$set触发update,将视图更新为最新数据。组件间传值的问题下面说一下组件间传值的方法,大家知道的方法都有,并描述问题,但是在项目中用到的比较少。基本可以回答,父子:道具;儿子对父亲:$emit;兄弟:事件总线;浏览器;有的会讲到sessionStorage和localStorage,路由参数(这个答案不是我想问的,但是也可以实现一定的传值)预期答案1、ovide/inject这对选项需要一起使用才能让一个祖先组件为其所有后代注入一个依赖,无论组件层级有多深,上下游关系的建立始终有效。2.Vue.observable使对象响应。Vue将在内部使用它来处理数据函数返回的对象。返回的对象可以直接在渲染函数和计算属性中使用,并且在发生变化时会触发相应的更新。它还可以用作简单场景的最小跨组件状态存储:3.$attrs包含属性绑定(类和样式除外),这些属性绑定在父范围中未被识别(和获取)为props。当一个组件没有声明任何props时,所有的父作用域绑定(除了class和style)都会被包含在这里,内部组件可以通过v-bind="$attrs"传入——在创建高级组件时非常有用。4.$listeners包含父作用域中的v-on事件监听器(没有.native修饰符)。它可以通过v-on="$listeners"传递给内部组件——在创建更高级别的组件时很有用。5.props6,$emit7,eventbus8,vuex9,$parent/$children/ref以上就是前端面试微信面试官想听什么回答(关于一些Vue问题)的详细内容公众号:我的web前端自救之路回复进群,一起和大佬交流技术
