vue面试小结

149 阅读3分钟

请简单描述一下vue的生命周期

beforeCreate、created(此时需说明可以在created中首次拿到data中定义的数据)、 beforeMount、mounted(此时需说明dom树渲染结束,可访问dom结构)、 beforeUpdate、updated、 beforeDestroy、destroyed

请阐述一下你所理解的MVVM模式

vue是采用数据劫持配合发布者-订阅者模式的方式,通过Object.definerproperty()来劫持各个属性的setter和getter,在数据变动时,发布消息给依赖收集器,去通知观察者,做出对应的回调函数,去更新视图

v-if和v-show的区别

v-if:

  • v-if会控制这个DOM节点的存在与否
  • 如果在运行时条件很少改变,则使用v-if比较好

v-show:

  • v-show仅仅控制元素的显示方式,通过display的属性none
  • 当我们需要经常切换某个元素的显示/隐藏时,使用v-show会更加节省性能上的开销

vue-router的hash和history的区别

hash 是根据页面锚点实现跳转 history是通过浏览器API实现锚点

Vue组件如何通信?

  • 父传子:props
  • 子传父:#emit $on
  • 兄弟之间通信 eventBus vuex
  • 获取父组件实例的方式parent,parent, children
  • ref获取实例的方式调用组建的属性或者方法

$nextTick用过吗,有什么作用

在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的DOM(官网) 解决的问题:有些时候在改变数据后立即要对dom进行操作,此时获取到的dom仍是数据刷新前的dom,无法满足需要,这个时候就用到了$nextTick

为何Vue采用异步渲染?

理解:vue是组件级更新 如果不采用异步更新,那么每次更新数据都会对当前组件进行渲染,所以为了性能考虑,vue会在本轮数据更新后,再去异步更新视图

什么场景下是必须用watch

父传子的时候

双向数据绑定双层数组不能绑定??

使用$set来设置属性

v-model的原理

v-model主要提供了两个功能,view层输入值影响data的属性值,data属性值发生改变会更新view层的数值变化。 其核心就是,一方面modal层通过defineProperty来劫持每个属性,一旦监听到变化通过相关的页面元素更新。另一方面通过编译模板文件,为控件的v-model绑定input事件,从而页面输入能实时更新相关data属性值。 v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值

vue中v-html会导致哪些问题

  • 可能会导致xxs攻击
  • v-html会替换掉标签内部的子元素

什么是作用域插槽?

1、插槽

  • 创建组件虚拟节点时,会将组建的儿子的虚拟节点保存起来,当初始化组件时,通过插槽属性将儿子进行分类{a:[vnode],b:[vnode]}
  • 渲染数组时会拿对应的slot属性的节点进行替换操作(插槽的作用域为父组件) 2、作用域插槽
  • 作用域插槽在解析的时候,不会作为组建的孩子节点,会解析成函数,当子组件渲染时,会调用此函数进行渲染(插槽的作用域为子组件)

谈谈你对keep-alive的了解?

理解:keep-alive 可以实现组件的缓存,当组件切换时不会对当前组件进行卸载,常用的两个属性include/exclude,2个生命周期activated,deactivated LRU算法