Vue常见面试题总结

198 阅读2分钟

v-show 和 v-if 的区别

  • v-show 通过css属性 display 控制显示和隐藏
  • i-if 组件真正的渲染和销毁,而不是显示和隐藏
  • 频繁切换显示状态用v-show,否则用v-if

为何再v-for中用key

  • 必须用key,且不是index和random
  • 原理:diff算法中通过tag和key来判断,是否sameNode
  • 效果:减少渲染次数,提升渲染性能

描述Vue组件生命周期(父子组件)

单组件生命周期按照官网的说一下就可以了

父子组件的生命周期关系

  • 组件创建实例是从外到内,渲染是从内到外的
  • 组件更新也是从外到内,更新完从内到外

Vue 组件如何通讯(常见)

  • 父子组件 props 和 $this.emit
  • 自定义事件 event.$on event.$off $event.$emit
  • vuex

双向数据绑定 v-model 的实现原理

  • v-model本质上是 :value和v-on的结合体,就是绑定他的value,通过v-on触发,从而更新数据
  • 双向绑定得的实现主要依赖于Object.defineProperty(),通过这个函数可以监听到get,set事件

  • 其中observer是最主要的部分,用Object.defineProperty来实现数据的劫持,然后用他的set,get方法来通知订阅者,触发update方法,从而实现更新视图

computed有什么特点

  • 缓存,data不变不会重新计算
  • 提高Vue运行性能

为何组件data必须是一个函数

  • 组件的data必须是一个函数
  • 我们定义的每一个Vue组件是一个Class,每个地方使用这个组件的时候,相当于是对类的实例化

ajax请求应该放在哪个生命周期

  • mounted
  • JS 是单线程的,ajax异步获取数据

什么时候使用异步组件

  • 加载大组件的时候
  • 路由异步加载

什么时候需要使用 keep-alive

  • 缓存组件,不需要重复渲染
  • 多个静态tab页的切换,不需要重新渲染
  • 优化性能

Vuex中action 和 mutation 有什么区别

  • action 中处理异步操作,mutation 不可以
  • mutation 只能做单个的操作
  • action 可以整合多个mutation

Vue-router常用的路由模式

  • hash 默认
  • H5 history(需要服务端支持)

监听data变化的核心API是什么

  • object.defineproperty