vue面试题总结

613 阅读2分钟

1、v-show和v-if的区别

2、为何在v-for中显示key

diff算法中会通过tag和key来判断是不是sanmeNode(相同的节点),从而减少渲染次数,提升性能

3、vue组件生命周期(父子组件)

4、vue组件的常见通讯方式

5、vue组件的渲染和更新方式

6、computed有何特点

缓存,data不变不会重新计算(提升性能)

7、为何data必须是一个函数

如果data不是一个函数,那么组件调用多次的时候,data的指向是同一个地址

8、如何将组件的所有属性传给子组件

$props

    <MyCompontents v-bind="$props"/>
    
    //自组件$attr获取

9、如何自己实现v-model

//VModelComponents
<input :value="text" @input="$emit('change',$event.target.value)">

<script>
    export default {
        model:{
            prop:'text',
            event:'change'
        },
        props:['text']
    }
<script/>

//调用
<VModelComponents v-model="xxx" @change="xxx"/>

10、多个组件有相同逻辑怎么抽离

mixin (缺点是变量不易查找、容易同名覆盖、多对多关系时会很乱)

11、何时需要使用beforeDestory

1:解绑自定义事件(event.$off)2:清除定时器 3:解绑自定义dom事件

12、什么是作用域插槽

    //  slot
    a={msg:'hello'}
    <slot :slotData="a"/>
    
    //使用
    <template v-slot="slotProps">
        {{slotProps.msg}}
    <template/>

13、action和mutation有何区别

action可以处理异步,mutation做原子操作,action可以整合多个mutation

14、vue-router常用路由模式

hash History(需要服务端支持)

15、坚挺data变化的核心API是什么

Object.defineProperty

16、vue如何监听数组变化

Object.defineProperty不能监听数组变化 (重新定义原型,充血push pop等方法,实现监听)Proxy可以监听数组变化

17、响应式原理

18、简述diff算法过程

19、vue为何是异步渲染 ,$nextTick有何用

异步渲染(以及合并data修改),可以提高渲染性能

20、vue常见性能优化

1、合理使用v-show v-if, 2、合理使用computed,3、循环的时候加key 4、自定义事件,自定义dom事件及时销毁 5、合理使用异步组件 6、合理使用keep-alive 7、data层级不要太深 8、图片懒加载