Vue是一套构建用户界面的渐进式框架,具有简单易用、性能好、前后端分离等优势,是web前端工程师工作的好帮手,也是企业选拔人才时考察的重点技能。接下来就给大家分享一些Vue相关的面试题,帮助大家提升竞争力。
你对Vue生命周期的理解?
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载等一系列过程,我们称这是Vue的生命周期。
Vue组件如何通信?
Vue组件通信的方法如下:
props $emit+v-on: 通过props将数据自上而下传递,而通过$emit和v-on来向上传递信息。
EventBus: 通过EventBus进行信息的发布与订阅;
vuex: 是全局数据管理库,可以通过vuex管理全局的数据流;
$attrs $listeners: Vue2.4中加入的$attrs/$listeners可以进行跨级的组件通信;
provide/inject:以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效,这成为了跨组件通信的基础。
Vue如何实现双向绑定?
利用Object.defineProperty劫持对象的访问器,在属性值发生变化时我们可以获取变化,然后根据变化进行后续响应,在vue3.0中通过Proxy代理对象进行类似的操作。
如何理解Vue的响应式系统的?
响应式系统简述:任何一个 Vue Component都有一个与之对应的Watcher实例。Vue的data上的属性会被添加getter和setter属性。当Vue Component render函数被执行的时候,data上会被 触碰(touch),即被读, getter方法会被调用, 此时Vue会去记录此Vue component所依赖的所有data。(这一过程被称为依赖收集)
data被改动时(主要是用户操作),即被写,setter方法会被调用, 此时Vue会去通知所有依赖于此data的组件去调用他们的render函数进行更新。
Vue中的key到底有什么用?
key是为Vue中的vnode标记的唯一id,通过这个key,我们的diff操作可以更准确、更快速。
准确: 如果不加key,那么vue会选择复用节点(Vue的就地更新策略),导致之前节点的状态被保留下来,会产生一系列的bug。
快速: key的唯一性可以被Map数据结构充分利用,相比于遍历查找的时间复杂度O(n),Map的时间复杂度仅仅为O(1)。
computed和watch有什么区别?
computed:
computed是计算属性,也就是计算值,它更多用于计算值的场景;
computed具有缓存性,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时才会重新调用对应的getter来计算;
computed适用于计算比较消耗性能的计算场景。
watch:
更多的是「观察」的作用,类似于某些数据的监听回调,用于观察props $emit或者本组件的值,当数据变化时来执行回调进行后续操作;
无缓存性,页面重新渲染时值不变化也会执行。
当然,根据企业中对web前端人才的岗位职责规定不同,面试考察的重点也不尽相同。如果你想了解更多web前端面试题或掌握更多面试技巧,可以关注“好程序员”,定期发布技术热点和求职指导文章,助力你更快更好的求职。