ToB企服应用市场:ToB评测及商务社交产业平台

标题: 2024 前端高频面试题之 Vue 篇 [打印本页]

作者: 星球的眼睛    时间: 2024-6-30 00:04
标题: 2024 前端高频面试题之 Vue 篇

1、v-for 和 v-if 可以混淆使用吗?为什么?

可以,但是尽量不要同时使用,v-for盘算优先级比v-if高,首先会把假造节点渲染出来,然后再进行v-if判断。降低渲染性能
2、v-for 中为什么加 key?

如果不使用 key,Vue 会使用一种最大限度淘汰动态元素而且尽可能的尝试当场修改/复用相同范例元素的算法。key 是为 Vue 中 vnode 的唯一标志,通过这个 key,diff 算法可以更正确、更快速


3、变乱默认有个 event 参数,它是什么?怎么使用?变乱被绑定到那里?

当变乱没有参数,则默认有个 event 参数;如果有自定义参数,则需要使用$event 传已往。

4、vue 父子组件如何通讯?


5、父子组件声明周期调用次序?


6、vue 双向绑定原理(响应式原理)?

采用数据挟制结合观察者模式的方式

通过 Object.defineProperty()来挟制各个属性(只会挟制已经存在的属性)的 setter,getter,dep 和 Watcher 实现依靠收集和派发更新的过程:

7、$nextTick 是什么?为什么优先办理微任务?

nextTick 中的回调是在下次 DOM 更新循环结束之后执行的延迟回调。在修改数据之后立纵然用这个方法,获取更新后的 DOM。重要思绪就是采用微任务优先的方式调用异步方法去执行 nextTick 包装的方法
8、vuex 是什么?为什么使用?

vuex 是专门为 vue 提供的全局状态管理体系,用于多个组件中数据共享、数据缓存等。(无法持久化、内部焦点原理是通过创造一个全局实例 new Vue)
重要包括以下几个模块:

9、keep-alive 是什么?怎么实现的?生命周期?首次加载是先执行 activated 照旧 deactivated,为什么?

作用与用法:

开发中缓存组件使用 keep-alive 组件,keep-alive 是 vue 内置组件,keep-alive 包裹动态组件 component 时,会缓存不活动的组件实例,而不是销毁它们,如许在组件切换过程中将状态保留在内存中,防止重复渲染 DOM。

使用细节:

结合属性 include 和 exclude 可以明确指定缓存哪些组件或排除缓存指定组件。vue3 中结合 vue-router 时厘革较大,之前是 keep-alive 包裹 router-view,现在需要反过来用 router-view 包裹 keep-alive。

keep-alive 的中缓存的时间还运用了 LRU(Least Recently Used) 算法。

LRU(最近最少使用) 缓存机制:

如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间

组件缓存后更新,办理方案可以有以下两种:

原理:

keep-alive 是一个通用组件,它内部定义了一个 map,缓存创建过的组件实例,它返回的渲染函数内部会查找内嵌的 component 组件对应组件的 vnode,如果该组件在 map 中存在就直接返回它。由于 component 的 is 属性是个响应式数据,因此只要它厘革,keep-alive 的 render 函数就会重新执行。

参数:

keep-alive 罗致三个参数:

include 和 exclude,传数组情况居多。

生命周期:

生命周期有:activated 激活、deactivated 离开

当再次前进大概后退的时间只触发 activated。

使用 keep-alive 会将数据保留在内存中,如果要在每次进入页面的时间获取最新的数据,需要在 activated 阶段获取数据,承担原来 created 钩子中获取数据的任务。那么,我们一般会在动态组件、路由组件去用到 keep-alive 组件。
10、vue2 和 vue3 的区别?


11、history 和 hash 路由实现原理?区别是什么?

hash 模式


  1. window.addEventListener("hashchange", funcRef, false);
复制代码
每一次改变 hash(window.location.hash),都会在欣赏器的访问汗青中增加一个记录。

利用 hash 的以上特点,就可以来实现前端路由 “更新视图但不重新请求页面” 的功能了

   特点:兼容性好但是不雅观
  history 模式

利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。

这两个方法应用于欣赏器的汗青记录站,在当前已有的 back、forward、go 的底子之上,它们提供了对汗青记录进行修改的功能。这两个方法有个共同的特点:当调用他们修改欣赏器汗青记录栈后,虽然当前 URL 改变了,但欣赏器不会革新页面,这就为单页应用前端路由 “更新视图但不重新请求页面” 提供了底子。
   特点:虽然雅观,但是革新会出现 404 需要后端进行配置
  12、请说出常用的设计模式?(5 种以上)并举例实际项目中的使用场景。


13、$emit 和 $on 的本质?


14、假造 dom 是什么?原理?优缺点?

用 js 模仿一颗 dom 树,放在欣赏器内存中.当你要变更时,假造 dom 使用 diff 算法进行新旧假造 dom 的比较,将变更放到变更队列中,反应到实际的 dom 树,淘汰了 dom 操作。

假造 DOM 将 DOM 树转换成一个 JS 对象树,diff 算法逐层比较,删除,添加操作,但是,如果有多个相同的元素,可能会浪费性能,所以,react 和 vue-for 引入 key 值进行区分。

优点:


缺点:

无法进行极致优化: 虽然假造 DOM + 合理的优化,足以应对绝大部分应用的性能需求,但在一些性能要求极高的应用中假造 DOM 无法进行针对性的极致优化。
首次渲染大量 DOM 时,由于多了一层假造 DOM 的盘算,会比 innerHTML 插入慢。
15、mixin 是什么?优缺点?原理?vue3 用什么取代了?

组件和组件之间有时间会存在相同的代码逻辑,分为局部混入全局混入,我们希望对相同的代码逻辑进行抽取

缺点:


Vue3 使用 Composition API 替代了,优点:

16、自定义指令?原理?

Vue 自定义指令有全局注册局部注册两种方式。先来看看注册全局指令的方式,通过 Vue.directive(id, [definition]) 方式注册全局指令。然后在入口文件中进行 Vue.use() 调用。

它的作用代价在于当开发人员在某些场景下需要对普通 DOM 元素进行操作。提高代码复用。

指令本质上是装饰器,是 vue 对 HTML 元素的扩展,给 HTML 元素增加自定义功能。vue 编译 DOM 时,会找到指令对象,执行指令的相关方法。

自定义指令有五个生命周期(也叫钩子函数),分别是 bind、inserted、update、componentUpdated、unbind

原理


17、变乱绑定原理?

$on、$emit 是基于发布订阅模式的,维护一个变乱中心,on 的时间将变乱按名称存在变乱中心里,称之为订阅者,然后 emit 将对应的变乱进行发布,去执行变乱中心里的对应的监听器
18、$set 的原理?

因为响应式数据 我们给对象和数组自己都增加了 __ob__ 属性,代表的是 Observer 实例。当给对象新增不存在的属性 首先会把新的属性进行响应式跟踪 然后会触发对象 __ob__ 的 dep 收集到的 watcher 去更新,当修改数组索引时我们调用数组自己的 splice 方法去更新数组
19、Vue3 比 Vue2 有什么上风?


20、Vue3 声明周期


21、Composition API 和 Options API


如何选择?


22、如何理解 ref、toRef 和 toRefs

ref:


toRef:


toRefs:


23、为何 ref 需要 value 属性?


24、Vue3 升级了哪些重要的功能?



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4