• 技术文章 >头条

    37个常见Vue面试题,增强你的Vue知识储备!

    青灯夜游青灯夜游2022-02-19 23:51:50转载318
    本篇文章给大家总结分享37个常见Vue面试题,带你巩固一波地基,增强你的Vue知识储备,背就完事了!

    相关推荐:2022年大前端面试题汇总(收藏)

    一、谈谈你对MVVM的理解?

    映射关系简化,隐藏controller MVVM在MVC的基础上,把控制层隐藏掉了。

    1.png

    Vue不是一个MVVM框架,它是一个视图层框架。【相关推荐:vue.js视频教程

    ViewModal是一个桥梁,将数据和视图进行关联。

    二、谈谈你对Vue中响应式数据的理解?

    数组和对象类型的值变化的时候,通过defineReactive方法,借助了defineProperty,将所有的属性添加了gettersetter。用户在取值和设置的时候,可以进行一些操作。

    缺陷:只能监控最外层的属性,如果是多层的,就要进行全量递归。

    get里面会做依赖搜集(dep[watcher, watcher]) set里面会做数据更新(notify,通知watcher更新)

    三、Vue中如何检测数组的变化?

    vue中对数组没有进行defineProperty,而是重写了数组的7个方法。 分别是:

    因为这些方法都会改变数组本身。

    数组里的索引和长度是无法被监控的。

    四、Vue中如何进行依赖收集的?

    2.png

    Vue初始化的时候,挂载之后会进行编译。生成renderFunction。

    当取值的时候,就会搜集watcher,放到dep里面。

    当用户更改值的时候,就会通知watcher,去更新视图。

    五、如何理解Vue中的模板编译原理?

    这个问题的核心是如何将template转换成render函数。

    1. 将template模块转换成ast语法书 - parserHTML
    2. 对静态语法做标记(某些节点不改变)
    3. 重新生成代码 - codeGen,使用with语法包裹字符串

    六、Vue生命周期钩子是如何实现的?

    Vue的生命周期钩子是回调函数,当创建组件实例的过程中会调用相应的钩子方法。 内部会对钩子进行处理,将钩子函数维护成数组的形式。

    七、Vue组件生命周期有哪些?

    八、vue.mixin的使用场景和原理?

    Vue的mixin的作用就是抽离公共的业务逻辑,原理类似对象的继承,当组件初始化的时候,会调用mergeOptions方法进行合并,采用策略模式针对不同的属性进行合并。 如果混入的数据和本身组件的数据有冲突,采用本身的数据为准。

    缺点:命名冲突、数据来源不清晰

    九、Vue的组件data为什么必须是一个函数?

    new Vue是一个单例模式,不会有任何的合并操作,所以根实例不必校验data一定是一个函数。 组件的data必须是一个函数,是为了防止两个组件的数据产生污染。 如果都是对象的话,会在合并的时候,指向同一个地址。 而如果是函数的时候,合并的时候调用,会产生两个空间。

    十、请说明nextTick的原理。

    nextTick是一个微任务。

    十一、computed和watch的区别是什么?

    十二、Vue.set方法是如何实现的?

    十三、Vue为什么要用虚拟Dom

    十四、Vue的diff算法原理是什么?

    Vue的diff算法是平级比较,不考虑跨级比较的情况。内部采用深度递归的方式+双指针方式比较

    十五、既然vue通过数据劫持可以精准的探测数据变化,为什么还要进行diff检测差异?

    所以采用watcher + Diff算法来检测差异。

    十六、请说明key的作用和原理

    3.png

    十七、谈谈对组件的理解

    十八、请描述组件的渲染流程

    产生组件虚拟节点 -> 创建组件的真实节点 -> 插入到页面

    4.png

    十九、请描述组件的更新流程

    属性更新会触发patchVnode方法,组件的虚拟节点会调用prepatch钩子,然后更新属性,更新组件。

    5.png

    二十、异步组件原理

    先渲染异步占位符节点 -> 组件加载完毕后调用forceUpdate强制更新。

    二十一、函数组件的优势和原理

    正常的一个组件是一个类继承了Vue。

    函数式组件,就是一个普通的函数。

    二十二、组件的传值方式有哪些?

    1. props和emit:父组件向子组件传递数据,通过prop传递。子组件传递数据给父组件是通过emit: 父组件向子组件传递数据,通过prop传递。子组件传递数据给父组件是通过emit事件
    2. parent,parent,children获取当前组件的父组件和当前组件的子组件
    3. attrsattrs和listeners 。
    4. 父组件通过provide提供,子组件通过inject注入变量
    5. $ref获取实例
    6. eventBus平级组件数据传递
    7. Vuex

    二十三、$attrs是为了解决什么问题出现的?

    主要作用是为了实现批量传递数据。

    provide/inject更适合应用在插件中,主要实现跨级数据传递。

    二十四、v-for和v-if哪个优先级更高?

    首先,v-for和v-if 不能在同一个标签中使用。

    先处理v-for,再处理v-if。

    如果同时遇到的时候,应该考虑先用计算属性处理数据,在进行v-for,可以减少循环次数。

    二十五、v-mode是如何实现的?

    在组件上用的v-model,是model和callback

    6.png

    在普通元素上用v-model,会生成指令,还可能因为不同的元素:

    7.png

    指令在什么时候会调用?

    8.png

    源码:

    9.png

    二十六、Vue的普通Slot以及作用域Slot的区别

    普通插槽

    普通插槽是渲染后做替换的工作。父组件渲染完毕后,替换子组件的内容。

    10.png

    在模板编译的时候,处理组件中的子节点和slot标签

    11.png

    在创建元素的时候,用_t()方法方法来替换_v()的内容。

    12.png

    作用域插槽

    作用域插槽可以拿到子组件里面的属性。在子组件中传入属性然后渲染。

    13.png

    14.png

    作用域插槽的编译结果:

    15.png

    16.png

    二十八、Vue.use是干什么的?

    Vue.use是用来使用插件的。我们可以在插件中扩展全局组件、指令、原型方法等。 会调用install方法将Vue的构建函数默认传入,在插件中可以使用vue,无需依赖vue库

    17.png

    二十九、组件写name有啥好处?

    三十、vue的修饰符有哪些?

    三十一、如何理解自定义指令?

    三十二、keep-alive平时在哪里使用?原理是什么?

    使用有两个场景,一个是动态组件,一个是router-view

    18.png

    这里创建了一个白名单和一个黑名单。表明哪些需要需要做缓存,哪些不需要做缓存。以及最大的缓存个数。

    19.png

    缓存的是组件的实例,用key和value对象保存。

    加载的时候,监控include和exclude。

    20.png

    如果不需要缓存,直接返回虚拟节点。

    如果需要缓存,就用组件的id和标签名,生成一个key,把当前vnode的instance作为value,存成一个对象。这就是缓存列表

    如果设置了最大的缓存数,就删除第0个缓存。新增最新的缓存。

    并且给组件添加一个keepAlive变量为true,当组件初始化的时候,不再初始化。

    三十三、vue-router有几种钩子函数?执行流程如何?

    钩子函数有三种:

    21.png

    三十四、vuerouter的两种模式的区别

    三十五、谈谈Vue的性能优化有哪些?

    三十六、谈谈你对Vuex的理解?

    Vuex是专门为vue提供的全局状态管理系统,用于多个组件中的数据共享、数据缓存。

    问题:无法持久化。

    22.png

    三十七、vue中使用了哪些设计模式?

    23.png

    原文地址:https://juejin.cn/post/7043074656047202334

    作者:海明月

    (学习视频分享:web前端

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:Vue 面试题
    上一篇:第19期PHP直播班,开课啦! 下一篇:15道虾皮服务端面试真题,你能全答对吗?(附解析)
    PHP编程就业班

    相关文章推荐

    • Vue中怎么进行网页预渲染?prerender-spa-plugin的用法浅析• 浅析CSS中的5种设计模式,聊聊vue项目中CSS目录代码的作用• 深入了解Vue中的Hooks,聊聊它对于 Vue 的意义!• vue中$refs和$el的用法是什么• Vue3中如何实现过渡动画?组件和动画库方法解析• 干货分享:Vue3组件通信的7种方式!

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网