1.v-show和v-if的区别
v-show是通过display控制元素的显示隐藏.v-if是真正的渲染和销毁.如果频繁切换用v-show.
2.v-show和keep-alive的区别
简单的用v-show,复杂的用keep-alive,如tab切换
3.v-for为什么用key
key是元素的唯一标识,可以减少渲染次数,提高性能
4.vue生命周期
beforecreate 还没有初始化data和methods
created data和methods已经创建完成
beforemount 还没有渲染
mounted 渲染完成,可以操作dom
beforeupdate data中的数据已经更新,页面数据还未更新
updated 页面重新渲染完成
beforedestroy 清除定时器
destroyed
5.多组件生命周期
挂载阶段(加载渲染过程):
父 beforeCreate --> 父 created --> 父 beforeMount --> 子 beforeCreate --> 子 created --> 子 beforeMount --> 子 mounted --> 父 mounted
更新阶段:
父 beforeUpdate --> 子 beforeUpdate --> 子 updated --> 父 updated
销毁阶段:
父 beforeDestroy --> 子 beforeDestroy --> 子 destroyed --> 父 destroyed
6.vue组件间通讯
父传子:props $children ref
子传父:$emit $parent
兄弟组件间传值:vuex eventbus
7.computed和watch
computed有缓存,不支持异步
watch支持异步
8.为什么data返回必须是一个函数?
防止组件复用时数据相互影响
9.vuex中action和mutation的区别?
action可以处理异步,mutation不能
10.vue-router的常用路由模式?
hash模式:带#
history模式
11.性能优化
v-show和v-if
合理使用computed
避免v-if和v-for同时使用
12.vuex
state,getters,mutation,action,module
13.JS数据类型,如何判断
number,string,boolean,null,undefined,object,symbol
typeof,instance of,object.prototype.toString.call
14.this指向
普通函数this指向调用者
全局范围this指向window
构造函数this指向new出来的对象
箭头函数this指向定义时的this
15.vue双向绑定原理
object.defineproperty()的set get方法来劫持data里的数据,通过发布订阅者模式实现动态渲染