首页 > 其他分享 >【前端面试】Vue面试题总结(持续更新中)

【前端面试】Vue面试题总结(持续更新中)

时间:2022-11-16 14:03:37浏览次数:52  
标签:面试题 Vue 博客 面试 CSDN 组件 data 页面


由于已经有很多前辈深造VUE的某一块知识,所以我也是大树下好乘凉,进行总结与积累。

就有这篇博客,希望对各位面试求职的同学有所帮助。

注意:

每题都附上链接并不是说要参考这个链接的意思,而是他们的例子或者解释说明更好、更全与更方便理解。

学习方法:

多看理论总结,多跟着大佬写项目。当新的问题被你发现了,你就离大佬就不远了。

Vue的优点

  • 轻量级
  • 速度快
  • 简单易学
  • 低耦合
  • 可重用性
  • 独立开发
  • 文档齐全,中文文档

Vue父子组件通信


prob:一般写道data里定义的变量

父组件传给子组件数值,子组件不要对其进行修改,而是需要找个变量将父组件传递的数值给赋值过来然后对变量进行操作,另外注意深浅拷贝。

$emit

从子组件向父组件通知并传递数值,与​​prob​​相反

怎么理解Vue的单项数据流

如何理解Vue中的单向数据流_星海拾遗的博客-CSDN博客_vue的单向数据流

数据总是从父组件传到子组件,子组件没有权力修改父组件床过来的数据,只能请求父组件对原始数据进行修改。

这样可以防止子组件意外修改父组件的状态,从而导致应用的数据流难以理解。

如何让CSS只在当前组件中起作用?

将当前组件的​​<style>​​​修改为​​<style scoped>​

keep-alive的作用是什么?

​<keep-alive></keep-alive>​

​keep-alive​​可以在组件切换时,保存其包裹的组件的状态,使其不被销毁,防止多次渲染,即适用与需要频繁切换的组件需要缓存的情况。

如何获取DOM

原生JS的方法

原生js获取DOM对象的几种方法_飞翔在蓝天下的蜂鸟的博客-CSDN博客_获取dom

VUE的方法:

Vue中ref和$refs的介绍及使用_@Demi的博客-CSDN博客_ref vue

元素绑定ref之后,直接通过this.$refs即可调用,这样可以减少获取dom节点的消耗。

说出几种Vue当中的指令和它的用法

API — Vue.js 中文文档 (bootcss.com)

v-for和v-if的优先级

vue的注意规范之v-if 与 v-for 一起使用_岁月如歌_的博客-CSDN博客_vuevfor和vif一起用

如果同时使用,会有个先后运行的优先级,​​v-for​​​ 的优先级比 ​​v-if​​​ 更高,这意味着 ​​v-if​​​ 将分别重复运行于每个 ​​v-for​​ 循环中。

vue-loader是什么,用途有哪些

Vue-loader 是什么?使用它的用途有哪些?_大春也有人抢?的博客-CSDN博客_vue-loader是什么,用途有哪些

​vue​​​文件的一个加载器,将​​template/js/style​​​转换为​​js​​模块

用途:js可以些es6、style样式

v-on可以监听多个方法吗

v-on可以监听多个方法吗?_Billow_lamb的博客-CSDN博客_v-on可以监听多个方法吗

通过​​v-on​​​指令可以监听​​vue​​​的​​methods​​定义好的方法函数。

而​​v-on​​​只用写入方法名即可,类似​​v-on="onclick,onbure"​​这种形式。

v-show和v-if指令的联系和区别

Vue内置指令——v-show和v-if指令_非早起选手的博客-CSDN博客_v-show 两个条件

v-if

v-show

处理DOM

动态添加或删除DOM元素,所以有事件监听和相应的组件

通过设置DOM元素的display颜色属性控制显隐

性能消耗

切换消耗高

初始渲染消耗高

使用场景

不常需要用的

需要频繁切换的

Vue中为什么要使用key

详细讲解Vue中为什么要使用key_飞翔的柠檬的博客-CSDN博客_vue控制元素更新为什么使用key

給每个​​dom​​​元素加上​​key​​​作为唯一标识,​​diff​​​算法可以准确识别这些​​vnode​​节点,使页面渲染更加快速。

原因:

准确:带key就有唯一的引用地址,在同值节点的情况下,避免就地复用。

快速:key可以生成唯一的哈希表,当然比遍历快

$nextTick的作用


由于​​Vue​​​ 实现响应式并不是数据发生变化之后 ​​DOM​​​ 立即变化,而是按一定的策略进行 ​​DOM​​​ 的更新,所以在通过定义函数想要修改​​data()​​​中的数据时,页面是无法获取​​data​​修改后的数据的。

解决方案:

使用​​$nextTick​​​回调时,当​​data​​中的数据修改后,可以实时渲染更新页面

Vue组件中的data为什么是一个函数?

vue组件中的data为什么是一个函数_web青梅煮码的博客-CSDN博客_vue中的data为什么是一个函数

因为JS的特性,在Component中,data必须以函数的形式存在,不可以是对象。

写成函数:

数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,而这些组件只用负责维护数据即可。

写成对象:

所有组件都共用一个data,修改一个,另一个new同名对象也会跟着改变。

Vue 双向绑定的原理

vue是如何实现双向数据绑定的原理 - CSDN

Vue 双向数据绑定原理_手写Hello World工程师的博客-CSDN博客_vue实现双向绑定原理

【前端面试】Vue面试题总结(持续更新中)_vue

核心:

在vue2.0中,双向绑定的核心是​​object.defineProperty()​

原理:

​Vue​​双向数据绑定是通过数据劫持+发布者–订阅者模式的方式实现。

通过​​object.defineProperty()​​​来劫持各个属性的​​setter、getter​​,在数据变动时发布消息给订阅者,触发相应的监听回调。

例子:

当把JS对象传给​​Vue​​​实例来作为它的​​data​​​选项时,​​Vue​​​将遍历他的属性​​Property​​​,用​​object.defineProperty​​​将属性转为​​getter/setter​​。

用户看不到​​getter/setter​​​,但是在内部它们让​​Vue​​追踪依赖,在属性被访问和修改时通知改变。

过程:

​Vue​​​的数据双向绑定将MVVM作为数据绑定的入口,整合​​observer,compile和watch​​三者。

通过​​observer​​ 监听自己的model的数据变化

通过​​compile​​ 来解析编译模板指令

利用​​watcher​​​ 搭起​​observer和compile​​之间的通信桥梁

最终效果:数据发生变化,视图要跟着变化。视图变化,数据也跟着变化

多页面与单页面应用的区别

多页面与单页面应用的区别_心若向阳无谓悲伤的博客-CSDN博客_单页面应用和多页面应用的区别

单页面应用(SPA):指只有一个主页面的应用,页面的跳转通过显示页面片段的一部分(模拟跳转),一开始就要加载所有静态资源,所以初次等待耗时长,页面复杂度也高,当时对服务器的压力小,而且也不用再重新加载整个页面了。

多页面(MPA):就是一个应用中有多个页面,页面跳转实施整个页面刷新的,切换的过程就体验不好了,但是想应的实现难度和框架要求不会很高,平时做网站练习也选择这种方式。

父组件和子组件之间的生命周期钩子执行顺序

Vue——父子组件的生命周期(执行顺序)_默默花上开的博客-CSDN博客_父子组件生命周期

父组件和子组件之间的生命周期执行顺序_Felix_10的博客-CSDN博客_父组件和子组件生命周期顺序

渲染过程

父亲准备厨具后(父beforeCreate->父created),父亲炒菜准备(父beforeMount),儿子也跟着练手(子beforeCreate->子created->子beforeMount->子mounted),可父亲看不下去,只好亲自下厨(父mounted)

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

子组件更新

因为儿子在家,父亲是长辈,父亲先吃一口(父beforeUpdate),但是觉得被看着太尴尬了,就让儿子先吃,结果倒好,儿子一点面子都不给(子beforeUpdate->子updated),父亲也跟着开吃(父updated)

父beforeUpdate->子beforeUpdate->子updated->父updated

父组件更新

儿子不在家,父亲独自吃完

影响到子组件:- 父beforeUpdate -> 子beforeUpdate->子updated -> 父updated

不影响子组件:- 父beforeUpdate -> 父updated

销毁过程

父亲准备收拾碗筷(父beforeDestroy),但是儿子怎能不先表率(子beforeDestroy->子destroyed),最后父亲意思一下(父destroyed)

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

Vue生命周期

Vue的生命周期的详解_小小前端程序猿的博客-CSDN博客_vue生命周期

简单介绍:

每个​​Vue​​实例被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂在到DOM并再数据变化时更新DOM等。同时在这个过程也会运行生命周期钩子函数,用户可以在不同阶段添加自己的代码。

第一次页面加载触发的钩子:

beforeCreate->created->beforeMount->mounted

Vue获取数据一般所在的周期函数:

created、beforeMount、mounted

created​mounted​的区别:

created和mounted的区别_在线小白www的博客-CSDN博客_created和mounted区别

created:在模板渲染成HTML前调用,即通常初始化某些属性值,然后再渲染视图。

mounted:再模板渲染成HTML后调用,通常是初始化页面完成后,再对HTML的DOM节点进行操作。

简单理解生命周期:

  • 创建前/后

​beforeCreate​​​阶段:​​Vue​​​实例的挂载元素​​$el​​​和数据对象​​data​​​都为​​undefined​​,还未初始化。

​created​​​阶段:​​Vue​​​实例的数据对象​​data​​​有了,​​$el​​还没有

​beforeMount​​​阶段:​​Vue​​​实例的​​$el​​​和​​data​​​都初始化了,当挂载之前还是为虚拟的DOM节点,​​data.message​​还未替换

​mounted​​​阶段:​​Vue​​​实例挂载完成,​​data.message​​成功渲染

​beforeUpdate 与 updated​​阶段:只要数据更新

​destroyed​​​阶段:​​beforeDestroy​​​其实就提示已经到了要销毁的阶段,在​​destroyed​​​后,对​​data​​​的改变不会再触发周期函数,说明此时​​Vue​​​实例已经解除事件监听以及和​​DOM​​​的绑定,但是​​DOM​​的结构仍在。

Vuex

vuex是什么?怎么使用?哪种功能场景使用它?_Mr.Huang1014的博客-CSDN博客_vuex是什么?怎么使用?哪种功能场景使用它?

​vuex​​​是​​vue​​框架中状态管理

5中属性:state、getters、mutations、actions、modules

​state​​:数据源存放地

​getters​​:从基本数据派生出来的数据

​mutations​​:提交更改数据的方法,同步方式

​actions​​​:像一个装饰器,包裹​​mutations​​​,使其可以异步
​​​modules​​​:模块化​​Vuex​

Vuex页面刷新数据丢失

持久化,本地存储保存数据,可选择​​vuex-presist​​​插件,看自己要放到​​cookie​​​还是​​localstroage​

Vue中router和route的区别

【Vue】8.vue中和router和route的区别_Anabel Chen的博客-CSDN博客_和router和route的区别

​$route​​​是路由信息的对象,包括​​path、params、hash、query、fullPath、matched、name​​等路由信息参数

​$router​​是路由实例对象,包括了路由的跳转方法,钩子函数等。

Vue 事件使用 event 对象

获取事件对象,方法参数传递​​$event​​。

<button @click='Event($event)'>事件对象


标签:面试题,Vue,博客,面试,CSDN,组件,data,页面
From: https://blog.51cto.com/u_14627797/5856104

相关文章

  • 常见前端开发面试题
    你如何理解HTML结构的语意化?1、去掉或样式丢失的时候能让页面呈现清晰的结构。2、屏幕阅读器(如果访客有视障)会完全根据你的标记来"读"你的网页。3、PDA、手机等设备可能无......
  • Vue3的setup在el-tab中动态加载组件
    公司某项目需求在页面显示的组件是根据角色变化而变化的,在这个项目中我使用了elementplus的el-tabs来动态的显示这些组件,如下图所示数据内容大概是这样的在未使用setup......
  • vue3+Ts+Vite+ElementPlus+Axios+Router+Pinia 创建过程以及会出的错误
    第一步保证Node.Js版本为12.0以上打开cmd命令输入node-v看版本目前是最新用18.0就行,下载地址:[https://nodejs.org/en/](https://nodejs.org/en/)安装node.js配环境......
  • npm install提示request to https://registry.npmjs.org/vue-cli failed, reason: con
    错误如下npmERR!codeETIMEDOUTnpmERR!syscallconnectnpmERR!errnoETIMEDOUTnpmERR!networkrequesttohttps://registry.npmjs.org/vue-clifailed,reas......
  • 面试记录 一
    1、自我介绍2、js事件循环机制2.1、概念因为js是单线程运行的,在代码执行时,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。【栈:先进后出】在执行同步......
  • vuex中的mapMutations和mapActions
    <template><divclass="count"><h2>当前求和为:{{sum}}</h2><h3>当前求和放大十倍为为:{{bigSum}}</h3><h3>我在:{{address}}学习:{{subject}}<......
  • 聊聊Vuex原理
    背景Vuex是一个专为Vue.js应用程序开发的状态管理模式。Vuex是专门为Vue.js设计的状态管理库,以利用Vue.js的细粒度数据响应机制来进行高效的状态更新。如果你已......
  • vue源码分析-插槽原理
    Vue组件的另一个重要概念是插槽,它允许你以一种不同于严格的父子关系的方式组合组件。插槽为你提供了一个将内容放置到新位置或使组件更通用的出口。这一节将围绕官网对插......
  • Vue的data,components,methods,computed,mounted,activated,deactivated,beforeCreate
    1、dataVue会递归将data的属性转换为getter/setter,从而让data的属性能够响应数据变化。对象必须是纯粹的对象(含有零个或多个的key/value对)data(){ return......
  • Vue push() pop() shift().....
    push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。eg:数组中添加新元素newVue({data:{arr:['苹果','香蕉','橙子']......