• Vue面试题重难点总结



    1. 如何实现一个路径渲染多个组件?

    如何实现一个路径渲染多个组件?

    2. vue-router 3.1.0 新增的v-slot属性怎么用?

    的v-slot可以获取到底层的一些属性,用来做定制。使用v-slot时,要向router-link中传入一个单独的子元素,否则会被包裹在span中。

    在这里插入图片描述

    3. 如何监测动态路由的变化

    如何监测动态路由的变化

    4. 对MVC,MVP,MVVM的理解

    对MVC,MVP,MVVM的理解

    5. Vue数据响应式原理

    1. 所谓的数据响应式指的是数据变了,视图跟着变
    2. 总结成一句话:就是利用Object.defineProperty数据劫持和观察者模式来实现的
    3. vue会遍历此data中对象所有的属性,并使用Object.defineProperty把这些属性注册为getter/setter
    4. 每个组件实例都有watcher对象,watcher把在模板编译过程中所有的需要数据的对象记录下来,存在观察者列表中,并让订阅器Dep对观察者列表进行统一管理
    5. 当某个data中属性变化的时候,由于被劫持了,所以vue内部是知道的,调用对应的dep,去通知观察者列表中所有的观察者更新视图,从而致使它关联的组件得以更新。

    在这里插入图片描述

    6. 不用vuex时,简单的store模式管理数据

    store 状态管理模式的实现思想很简单,就是定义一个 store 对象,对象里有 state 属性存储共享数据,对象里还存储操作这些共享数据的方法。在组件中将 store.state 共享数据作为 data 的一部分或全部,在对 store.state 对象里的共享数据进行改变时,必须调用 store 提供的接口进行共享数据的更改。

    7. v-model和vuex有冲突吗?

    v-model和vuex有冲突吗?

    v-model是双向数据绑定 vue实例的data改变或者用户输入的改变都会触发视图更新。vuex是一个状态的存储,对于里面的状态的改变都是通过commit mutation 所以当用户输入直接修改editableTabsValue2,又不是通过commit更改状态时会报错。

    8. 解释单向数据流和双向数据绑定

    解释单向数据流和双向数据绑定

    view更新data通过事件监听即可,比如input标签监听 ‘input’ 事件就可以实现了。而当数据改变,则是由于vue的数据响应式原理。

    9. vue-router 路由实现原理

    vue-router 路由实现原理

    10. Vue-router使用params与query传参有什么区别

    Vue-router使用params与query传参有什么区别

    请添加图片描述

    11. 说明一下封装vue组件的原则和方法

    说明一下封装vue组件的原则和方法

    12. 谈谈vue生命周期函数?

    谈谈vue生命周期函数

    el是Vue实例的挂载目标。在实例挂载之后,元素可以用 vm.$el 访问。
    挂载阶段还没开始的时候,$el属性是不可见的。Vue生命周期mounted阶段,el被新创建的vm.$el替换,这个时候Vue实例的挂载目标确定, DOM渲染完毕。在这个Vue实例当中,也就可以使用vm.$el访问到el了。

    13. vue的实例选项对象?

    vue的实例选项对象

    vue的实例选项对象

    14. computed和watcher的区别?

    computed和watcher的区别

    15. Vue中computed的原理,怎么追踪到它的依赖的?怎么确定是他的依赖变更他才更新?

    简单来说,computed 是定义在 vm 上的一个特殊的 getter 方法,之所以说特殊,是因为在 vm 上定义 getter 方法时,get 并不是用户提供的函数,而是 Vue.js 内部的一个代理函数,在代理函数中可以结合 watcher 实现缓存与依赖等功能。

    计算属性的结果会被缓存,且只有在计算属性所依赖的响应式属性或者说计算属性的返回值发生变化时才会重新计算,那么如何知道计算属性的返回值是否发生变化?这其实是结合 watcher 的 dirty 属性来判断:当 dirty 属性为 true 时,说明数据已经“脏”了,需要重新计算“计算属性”的返回值,当 dirty 属性为 false 时,说明计算属性的值并没有改变,不需要重新计算。

    当计算属性中的内容发生变化后,计算属性的 watcher 会得到通知,计算属性的 watcher 会将自己的 dirty 属性设置为 true,当下次读取计算属性时,就会重新计算一次值,如果发现这一次计算出来的值与上一次计算出来的值不一样,再主动通知组件 watcher 进行重新渲染操作,由于要重新执行 render 函数,所以会重新读取计算属性的值,这个时候计算属性的 watcher 已经把自己的 dirty 属性设置为 true,所以会重新计算一次计算属性的值,用于本次的渲染。

    计算属性会通过 watcher 来观察它所用到的所有属性的变化,当这些属性发生变化时,计算属性会将自身的 watcher 属性设置为 true,说明自身的返回值变了。

    在这里插入图片描述

    16. v-for key

    2. “原地复用”

    “原地复用”是指Vue会尽可能复用DOM,尽可能不发生DOM的移动。Vue在判断更新前后指针是否指向同一个节点,其实不要求它们真实引用同一个DOM节点,实际上它仅判断指向的是否是同类节点(比如2个不同的div,在DOM上它们是不一样的,但是它们属于同类节点),如果是同类节点,那么Vue会直接复用DOM,这样的好处是不需要移动DOM

    "原地复用"应该就是设置key和不设置key的区别:

    不设key,newCh和oldCh只会进行头尾两端的相互比较,设key后,除了头尾两端的比较外,还会从用key生成的对象oldKeyToIdx中查找匹配的节点,所以为节点设置key可以更高效的利用dom

    vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。

    这样容易导致一些问题。因为类似