vue面试题总结

vue面试题总结,第1张

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

相同点:

v-show和v-if都能控制元素的显示和隐藏

不同点:

①实现本质方法不同

v-show本质是通过设置css中的display设置为none,控制隐藏

v-if是动态的向DOM树内添加或者删除DOM元素

②编译的区别

v-show是在控制css

v-if切换有一个局部编译/卸载的过程,切换过程中合适的销毁和重建内部的事件监听和子组件

③编译的条件

v-show都会变,初始值为false,只是将diaplay改为none

v-if初始值为false时,不会编译

④性能比较

v-show只编译一次,后面就是控制css,而v-if不停的销毁和创建,因此v-show的性能更好

注意点:

因为v-show实际是 *** 作display:" "或者none,当css本身有display:none时,v-show无法让显示

适用场景:

如果要频繁切换某节点时,使用v-show,如果不需要频繁切换某节点时,使用v-if

2.v-for中key的作用

key的作用主要是为了高效的更新虚拟DOM

3.vue中data为什么是function

①每个组件都是Vue的实例

②组件共享data属性,当data的值是同一个引用类型的值时,改变其中一个会影响其他

③组件中的data写成一个函数,数据以函数返回值定义,这样每复用一次组件,就会返回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。而单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果

4.vue中双向绑定的原理

①Object.defineProperty(obj, prop, descriptor) ,这个语法内有三个参数,分别为 obj (要定义其上属性的对象) prop (要定义或修改的属性) descriptor (具体的改变方法)

②当调用时我们使用了它里面的get方法,当我们给这个属性赋值时,又用到了它里面的set方法;

5.keep-alive的作用和被keep-alive声明的组件的生命周期

作用:

keep-alive包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染

生命周期:

生命周期函数:在被 keep-alive 包含的组件/路由中,会多出两个生命周期的钩 子:activated 与 deactivated。

①activated 钩子:在在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。

②Activated 钩子调用时机: 第一次进入缓存路由/组件,在 mounted 后面, beforeRouteEnter 守卫传给 next 的回调函数之前调用,并且给因为组件被缓存了,再次进入缓存 路由、组件时,不会触发这些钩子函数,beforeCreate created beforeMount mounted 都不会触发

③deactivated 钩子:组件被停用(离开路由)时调用:deactivated 钩子调用时机: 使用 keep-alive 就不会调用 beforeDestroy(组件销毁前钩子)和 destroyed(组件销毁),因为组件没被 销毁,被缓存起来了,这个钩子可以看作 beforeDestroy 的替代,如果你缓存了组件,要在组件销 毁的的时候做一些事情,可以放在这个钩子里,组件内的离开当前路由钩子 beforeRouteLeave => 路由前置守卫 beforeEach =>全局后置钩子 afterEach => deactivated 离开缓存组件 => activated 进入缓存组件(如果你进入的也是缓存路由)

6.说一下vue的生命周期,以及生命周期都做了什么事情?

vue生命周期是从vue实例创建到销毁的过程。从开始创建、初始化数据、编译模 板、挂载 Dom→渲染、更新→渲染、卸载等一系列过程。

①beforeCreate

在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用

②created

在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer)属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见

③beforeMount

在挂载开始之前被调用:相关的 render 函数首次被调

④mounted

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子,如果 root 实例挂载了一 个文档内元素,当 mounted 被调用时 vm.$el 也在文档内

⑤beforeUpdate

数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM, 比如手动移除已添加的事件监听器,该钩子在服务器端渲染期间不被调用,因为只有初次渲染会 在服务端进行

⑥updated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子

⑦beforeDestroy

实例销毁之前调用。在这一步,实例仍然完全可用。该钩子在服务器端渲染期间不被调用

⑧destroyed

Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监 听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用

7.vue什么时候 *** 作DOM比较合适? *** 作时发现有的组件获取不到,怎么办?

在 mounted 中可以访问 *** 作 DOM。
因为在钩子函数 mounted 被调用前,Vue 已经将编译好的模板挂载到页面上。

mounted不能保证所有子组件被挂载,因此需要使用$nexttick

8.发送网络请求在哪个函数中?

一般在 created(或beforeRouter) 里面就可以,如果涉及到需要页面加载完成之后的话就用 mounted。

9.vue组件间传值有哪些方式

①父组件向子组件传递数据

父组件内设置要传的数据,在父组件中引用的子组件上绑定一个自定义属性并把数据 绑定在自定义属性上,在子组件添加参数 props就收即可

②子组件向父组件传递数据

子组件通过 vue 实例方法$emit 进行触发并且可以携带参数,父组件监听使用@(v-on) 进行监听,然后进行方法处理

③非父子组件之间传递数据

两个组件的关系非常的复杂,通过父子组件通讯是非常麻烦的。这时候可以使用通用的组件通讯方案:事件总线(event-bus)

10.vue中改变数组内索引的值,数据不更新,如何处理

push()、pop()、shift()、unshift()、splice()、sort()、reverse()这些方法会改变被 *** 作的数组,filter()、concat()、 slice()这些方法不会改变被 *** 作的数组,并且返回一个新的数组,并更新视图

11.讲一下vuex

vuex 可以理解为一种开发模式或框架。通过状态集中管理驱动组件的变化

1、应用级的状态集中放在 store 中

2、改变状态的方式是提交 mutations,这是个同步的事物

3、异步逻辑应该封装在 action 中

vuex的5个核心属性分别是State、 Getter、Mutation、Action、Module

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/947007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存