课程名称: Vue面试真题演练
课程章节:框架面试课
课程讲师: 双越
课程内容:
1、v-show 和 v-if 的区别
v-show通过CSS display控制显示和隐藏
v-if组件真正的渲染和销毁,而不是显示和隐藏
频繁切换显示状态用v-show,否则用v-if
2、为何在v-for中用key
◆必须用key,且不能是index和random
◆diff算法中通过tag和key来判断,是否是sameNode
◆减少渲染次数,提升渲染性能
3、描述Vue组件生命周期(父子组件)
◆单组件生命周期图
beforeCreate(创建前):【没数据】
created(创建后) :【(有数据)没编译】
beforeMount(挂载前):【有数据(有编译)没挂载】
mounted(挂载后):【有数据有编译(有挂载)】
beforeUpdate(更新前):【(数据更新)没渲染】
updated(更新后) :【数据更新(有渲染)】
beforeDestroy(销毁前):【实例可用】
destroyed(销毁后):【实例不可用】
◆父子组件生命周期关系
加载渲染过程:
1.⽗组件 beforeCreate
2.⽗组件 created
3.⽗组件 beforeMount ~~~
4.⼦组件 beforeCreate
5.⼦组件 created
6.⼦组件 beforeMount
7.⼦组件 mounted
8.⽗组件 mounted
更新过程:
1.⽗组件 beforeUpdate ~~~
2.⼦组件 beforeUpdate
3.⼦组件 updated
4.⽗组件 updated
销毁过程:
1.⽗组件 beforeDestroy ~~~
2.⼦组件 beforeDestroy
3.⼦组件 destroyed
4.⽗组件 destoryed
4、Vue组件如何通讯(常见)
◆父子组件props和this.$emit
◆自定义事件event.$on event.$off event.$emit
◆vuex
5、描述组件渲染和更新的过程
vue原理的三大模块:1.响应式监听属性变化(紫色)2.模板渲染(黄色)3.虚拟DOM(绿色)
执行render函数时会触发“Touch”,触发 getter,然后收集依赖到watcher,触发getter更改时会触发setter,setter通知watcher看看之前是否收集过,收集过就触发re-render,触发vue渲染
6、双向数据绑定V-mode!的实现原理
◆input元素的value=this.name
◆绑定input事件this.name=$event.target.value
◆data更新触发re-render
7、对MVVM的理解
8、computed 有何特点
①缓存,data不变不会重新计算
②提高性能
9、为何组件data必须是一个函数?
因为,实际上.view文件被编译出来后,这个view组件是一个class类,然后在每个地方使用这个组件时,相当于对这个组件进行了实例化,在实例化时去执行data,如果data不是函数,那么每个组件的实例数据都一样了。在一个组件改数据,另一个组件也会跟着改变。
10、Ajax请求应该放在哪个生命周期?
◆mounted
◆JS是单线程的,ajax异步获取数据
◆放在mounted之前没有用,只会让逻辑更加混乱
11、如何将组件所有props传递给子组件?
◆$props
◆<user v-bind="$props”/>
◆细节知识点,优先级不高
12、如何自己实现v-model
13、多个组件有相同的逻辑,如何抽离?
◆nixin
◆以及mixin的一些缺点
1.变量来源不明确,不利于阅读。特别是在代码量大,引入多个mixin的情况下。
2.多mixin变量名会冲突,会覆盖。
3.mixin和组件可能出现多对多的关系,复杂度高。一个mixin对多个组件,多个组件对多个mixin