vue是组件化开发框架,所以对于vue应用来说组件间放入的数据通信非常重要。此题主要考察大家vue基本功,对于vue基础api熟练度。另外一些边界知识如provide/inject/$attrs则体现了面试者的知识广度。
组件传参的各种方式
注意vue3废弃的几个Api
- $children
- $listeners
- v-on.native
父子组件
– props / $emit / $parent / ref / $attrs
兄弟组件
– $parent / $root / eventbus / vuex
跨层级关系
– eventbus / vuex / provide + inject
此题考查常识,文档中曾有详细说明 v2 | v3;也是一个很好的实践题目,经常会遇到,能够看出面试者api熟悉程度和应用能力。
vue2中,v-for的优先级是高于v-if的,把他们放在一起,输出的渲染函数中可以看出会先执行循环再执行判断,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费;另外需要注意的是在vue3中则完全相反,v-if的优先级高于v-for,所以v-if执行的时候,它调用的变量还不存在,就会导致异常v-for="item in list" v-if="item.isShow"),此时定义一个计算属性或者直接v-for时过滤改列表(比如:v-for="item in list.filter(codin => codin.age > 0)")v-for="item in list" v-if="isShow" ),此时把v-if移动至容器元素上(比如 ul、ol)或者外面包一层 template即可明确指出 永远不要把 v-if 和 v-for 同时用在同一个元素上,显然这是一个注意事项必问题目,考查vue基础知识
| 生命周期Vue2 | 生命周期Vue3 | 描述 |
|---|---|---|
| beforeCreat | beforeCreate | 组件实例被创建之初 |
| created | created | 组件实例已经完全创建 |
| beforeMount | beforeMount | 组件挂载之前 |
| mounted | mounted | 组件挂载到实例上去之后 |
| beforeUpdate | beforeUpdate | 组件数据发生变化,更新之前 |
| updated | updated | 数据更新之后 |
| beforeDestory | beforeUnmount | 组件实例销毁/卸载之前调用 |
| destoryed | unmounted | 组件实例销毁/卸载之后调用 |
| 生命周期Vue2 | 生命周期Vue3 | 描述 |
|---|---|---|
| activated | activated | keep-alive缓存的组件激活时调用 |
| deactivated | deactivated | keep-alive 缓存的组件停用时调用 |
| errorCaptured | errorCaptured | 捕获一个来自子孙组件的错误时调用 |
| - | renderTracked | 调试钩子(开发模式可用),响应式依赖被收集时调用(在一个响应式依赖被组件的渲染作用追踪后调用) |
| - | renderTriggered | 调试钩子(开发模式可用),响应式依赖被触发时调用(在一个响应式依赖被组件触发了重新渲染之后调用) |
| - | servePrefetch | ssr only(服务端渲染中执行),组件实例在服务器上被渲染时调用 |

dom已创建,可用于获取访问数据和dom元素,访问子组件等view层还未更新,可用于获取更新前各种状态view层的更新,更新后,所有状态已是最新beforeUnmount:实例被销毁之前调用,可用于一些定时器或订阅的取消unmounted:销毁一个实例。可清理他与其他实例的连接,解绑他的全部指令及事件监听器双向绑定是vue的特色之一,是在开发中必然会用到的知识点,然而此题还问了实现原理,升级为深度考查。
v-model是语法糖,默认情况下相当于 :value 和 @input。使用v-model可以减少大量繁琐的事件处理代码,提高开发效率。的方式将XXX的值绑定到表单元素value上,对于checkbox,可以使用true-value和false-value指定特殊的值,对于radio可以使用value指定特殊的值;对于select可以通过options元素的value设置特殊的值;还可以结合.lazy、.number、.trim对v-model的行为做进一步限定;v-model用在自定义组件上又会有很大不同,vue3中它类似于sync修饰符,最终展开的结果是modelValue属性和update:modelValue事件;vue3中我们甚至可以用参数形式制定多个不同的绑定。例如v-model:foo和v-model:bar,非常强大v-model是一个指令,它的神奇魔法实际上是vue的编译器完成的。我做过测试,包含v-model的模板,转换为渲染函数之后,实际上还是是value属性的绑定以及input事件监听,事件回调函数中会做相应变量更新操作。编译器根据表单元素的不同会展开不同的DOM属性和事件对,比如text类型的input和textarea会展开为value和input事件;checkbox和radio类型的input会展开为checked和change事件;select用value作为属性,用change作为事件。