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