2024年Vue3 面试题小总结

Vue3 面试题小总结

1. OptionsAPI 与 CompositionAPI 的区别?

  • OptionsAPI
    • 选项式API,通过定义data、computed、watch、method等属性与方法,共同处理页面逻辑;
    • 缺点:
      • 当组件变得复杂的时候,导致对应属性的列表也会增长,可能会导致组件难以阅读和后期维护成本变高;
  • CompositionAPI
    • 组合式API,组件根据逻辑功能来组织,一个功能所定义的所有API会放在一起(高内聚,低耦合);
    • 优点:
      • 内部的功能容易碎片化,像某一个功能相关的数据放在一块,容易阅读和维护(不用翻来翻去找);
      • 将某个逻辑关注点相关的代码全都放在一个函数里,这样,当需要修改一个功能时,就不再需要在文件中跳来跳去;
      • 逻辑复用:
        • 在Vue2中,当混入多个mixin会存在两个非常明显的问题:命名冲突,数据来源不清晰;
        • 而组合式API可以通过编写多个函数就很好的解决了;
  • 总结
    • 在逻辑组织和逻辑复用这方面,组合式API是优于选项式API的;
    • 组合式API中见不到this的使用,减少了this指向不明的情况;
    • 组合式API几乎都是函数,会有更好的类型推断;

2. Vue3中为什么采用 Proxy 代替 defineProperty

  • defineProperty:
    • 来劫持整个对象,然后进行深度遍历,给每个属性添加 gettersetter,实现响应式,但是存在以下问题:
      • 检测不到对象属性的添加和删除;
      • 数组API方法无法监听到;
      • 需要对每个属性进行深度遍历,如果是嵌套对象,需要深层次监听,造成性能问题;
  • Proxy
    • 监听整个对象,那么整个对象的所有操作都会进入监听操作;
  • 总结
    • Object.defineProperty只能遍历对象属性进行劫持;
    • Proxy 直接可以劫持整个对象,便返回一个新对象,我们可以操作新对象达到响应式目的;
    • Proxy 可以直接监听数组的变化;
    • Proxy有13种拦截方法,不限于apply、ownKeys、deleteProperty、has等等,这是Object.defineProperty不具备的;

3. Vue3响应式原理

  • Vue响应式使用的是ES6的ProxyReflect相互配合实现数据响应式,解决了Vue2中试图不能自动更新的问题;
  • Proxy是深度监听,所以可以监听对象和数组内的任意元素,从而可以实现视图实时更新;
  • 响应式大致分为三个阶段:
    • 初始化阶段
      • 初始化阶段通过组件初始化方法形成对应的proxy对象,然后形成一个负责渲染的effct
    • get依赖收集阶段
      • 通过解析template,替换真实data属性,来触发get,然后通过satck方法,通过proxy对象key形成对应的deps,将负责渲染的effect存入deps。(这个过程还有其他的effect,比如watchEffect存入deps中 )。
    • set派发更新阶段
      • 当我们 this[key] = value 改变属性的时候,首先通过trigger方法,通过proxy对象key找到对应的deps,然后给deps分类分成computedRunnerseffect,然后依次执行,如果需要调度的,直接放入调度。

Proxy只会代理对象的第⼀层,那么Vue3⼜是怎样处理这个问题的呢?

  • 判断当前Reflect.get的返回值是否为Object,如果是则再通过 reactive ⽅法做代理, 这样就实现了深度观测。

监测数组的时候可能触发多次get/set,那么如何防⽌触发多次呢?

  • 我们可以判断key是否为当前被代理对象target⾃身属性,也可以判断旧值与新值是否相等,只有满⾜以上两个条件之⼀时,才有可能执⾏trigger。

4. watch 和 watchEffect 的区别?

  • watchwatchEffect 都是监听器,watchEffect 是一个副作用函数,它们之间的区别有:
  1. watch:既要指明监听数据的源,也要指明监听的回调;
  2. watchEffect:可以自动监听数据源作为依赖,不用指明监听那个数据,监听的回调中用到哪个数据,那就监听哪个数据;
  3. watch 可以访问改变前后的值,watchEffect 只能获取改变后的值;
  4. watch运行的时候 不会立即执行,值改变后才会执行,而watchEffect运行后可立即执行,这一点可以通过watch的配置项immeriate改变;
  5. watchEffect 有点像 computed
    • computed注重的是计算出来的值(回调函数的返回值),所以必须写返回值;
    • watchEffect注重的是过程(回调函数的函数体),所以不用写返回值;
      • watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调;
  6. Vue3与Vue2中的watch配置项一致,但也有两个小坑:
    • 监听reactive定义的响应式数据时,oldVal无法正确获取到,强制开启深度监听,depp配置项失效;
    • 监听reactive定义的响应式数据的某个属性时,deep配置项有效;

5. ref 与 reactive 的区别?

  1. refreactive它们主要用于响应式数据的创建;
  2. ref函数可以接收原始数据类型和引用数据类型;
  3. 使用ref声明的数据,在JS中使用的时候,需要添加.value的后缀;
  4. reactive函数只能接收引用数据类型;
  5. ref底层还是使用reactive来做,ref是在reactive上进行了封装,增强了其能力,使其支持了对原始数据类型的处理;
  6. Vue3中,reactive能做的ref能做,reactive不能做的ref也能做;

6. script setup 是干什么的?

  • script setup是Vue3的语法糖,简化了组合式API的写法,并且运行性能更高,使用script setup语法糖的特点:
  1. 属性和方法无需返回,直接使用;
  2. 引入组件的时候,会自动注册;
  3. 使用defineProps接收父组件传递的值;
  4. 使用useAttrs获取属性,useSlots获取插槽,defineEmits获取自定义事件;
  5. 默认不会对外暴露任何属性,如果有需要使用defineExpose

7. vFor 与 vIf 的优先级

  • 当面试官问到这个问题的时候,我们不能直接说前者比后者高(或者后者比前者高);
  • 我们应当根据Vue的不同版本做不同的回答;
  • Vue2
    • vFor 高于 vIf
  • Vue3
    • vIf 高于 vFor
  • 两个版本的区别
    • Vue2中,可以一起使用,但是非常不推荐哈,vIf也能获取到vFor中的item
    • Vue3中,不能一起使用,因为vIf不能使用vFor中的item(会直接报错,不能从 undefined中读取xxx属性);
      • image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/452710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频分割软件,到底哪一款才适合你?

在当今充满创意的数字时代,视频编辑已成为许多人表达想法、分享故事的重要手段。而在视频编辑的过程中,分割视频是一项关键而常见的任务,它能够让我们更精细地处理内容,使得最终的作品更为生动和引人入胜。然而,要想高…

揭秘财务数据分析的五力分析,轻松实现从会计财务到管理财务的华丽转身

在这个信息爆炸的时代,财务数据分析已经成为了企业和个人成功的关键。今天,就让我们一起揭开财务数据分析的神秘面纱,让你轻松掌握财务秘籍,成为财务高手! 一、财务数据分析,为何如此重要? 财…

访客到了官网就跳走,概率是官网颜值和体验出了问题。

很多小伙伴反馈官网ip不错,但是pv太少了,停留时间更少,这大概率是网站颜值和体验出问题了。 如果访客到了官网后就跳走,有可能是因为官网的颜值和用户体验出了问题。这种情况可能会导致访客对网站的第一印象不佳,从而选…

【spring】使用阿里Spring Initailiz创建项目

网络原因使用Spring Initailiz会出现超时。 那我们就换成阿里的 先看看spring官网的 网址:https://start.spring.io 使用一下阿里的 网址:https://start.aliyun.com/ 填写信息 都是java开发者,具体信息部介绍了。 选择组件 lombok spri…

OKHttpRetrofit

完成一个get请求 1.导入依赖 implementation("com.squareup.okhttp3:okhttp:3.14.")2.开启viewBinding android.buildFeatures.viewBinding true 3.加网络权限 和 http明文请求允许配置文件 <?xml version"1.0" encoding"utf-8"?> &l…

Kotlin:内联类(inline class)

点击查询内联类中文文档 点击查询内联类英文文档 简介 提醒&#xff1a;内联类仅在 Kotlin 1.3 之后版本可用 有时候&#xff0c;业务逻辑需要围绕某种类型创建包装器。然而&#xff0c;由于额外的堆内存分配问题&#xff0c;它会引入运行时的性能开销。此外&#xff0c;如果…

【嵌入式——QT】标准对话框

【嵌入式——QT】标准对话框 文件对话框颜色对话框字体对话框输入对话框消息框代码示例 文件对话框 QFileDialog 常用静态函数 getOpenFileName&#xff1a;选择打开一个文件&#xff1b;getOpenFileNames&#xff1a;选择打开多个文件&#xff1b;getSaveFileName&#xff1…

如何使用ArcGIS Pro生成带计曲线等高线

等高线作为常见的地图要素经常会被使用到&#xff0c;一般情况下生成的等高线是不带计曲线的&#xff0c;在某些情况下我们需要带计曲线的等高线&#xff0c;这里为大家介绍一下ArcGIS Pro生成带计曲线等高线的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数…

13、设计模式之模板模式(Template)

一、什么是模板模式 模板模式是一种基于继承实现的设计模式&#xff0c;它是行为型的模式。 主要思想是将定义的算法抽象成一组步骤&#xff0c;在抽象类种定义算法的骨架&#xff0c;把具体的操作留给子类来实现。 通俗地说&#xff0c;模板模式就是将某一行为制定一个框架&…

vue3 实现一个tab切换组件

一. 效果图 二. 代码 文件 WqTab.vue: <template><div ref"wqTabs" class"wq-tab"><template v-for"tab in tabs" :key"tab"><div class"tab-item" :class"{ ac: tabActive tab.key }" c…

LeetCode102题:二叉树的层序遍历(python3)

代码思路&#xff1a;使用队列先进先出的特性&#xff0c;queue[]不为空进入for循环&#xff0c;tmp存储每层的节点&#xff0c;将结果添加至res[]中。 python中使用collections中的双端队列deque()&#xff0c;其popleft()方法可达到O(1)时间复杂度。 class Solution:def lev…

uni-app开发特点和开发流程

uni-app是一个基于Vue.js框架的跨平台应用开发框架&#xff0c;通过一套代码可以同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。它采用了基于流布局的页面渲染机制&#xff0c;可以自动适配不同平台的屏幕尺寸和分辨率。uniapp官网&#xff1a;https://uniapp.dclo…

概率与常见的概率分布

概率是数据分析、机器学习中最基础的知识。也是在生活中最实用的一门学科&#xff0c;学了很多大道理不一定能过好一生&#xff0c;学好概率则有一定概率会变得更好。为大概率坚持&#xff0c;为小概率备份。 概率与分布 要想了解概率&#xff0c;首先得搞清楚概率和概率分布的…

2024蓝桥杯每日一题(区间合并)

一、第一题&#xff1a;挤牛奶 解题思路&#xff1a;区间合并 区间合并模板题 【Python程序代码】 n int(input()) a [] for i in range(n):l,r map(int,input().split())a.append([l,r]) def cmp(x):return x[0],x[1] a.sort(keycmp) res1,res20,0 st,ed a[0][0…

SQLiteC/C++接口详细介绍之sqlite3类(五)

快速跳转文章列表&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;四&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;六&#xff09;&#xff08;未发表&#xff09; 14.sqlite3_busy_handle…

猫咪挑食不吃猫粮是为什么?适口性好、普口性价的主食冻干推荐

现在咱养猫人个个吧自家的小猫咪当成宝贝宠着&#xff0c;宠着宠着一些坏习惯就出来。 然而&#xff0c;这种宠爱有时也会导致猫咪养成挑食的不良习惯。那么&#xff0c;当猫咪拒绝吃猫粮时&#xff0c;我们应该如何应对呢&#xff1f;今天跟大家一起来分析分析猫咪挑食不吃猫…

Claude3相较于GPT4有哪些优点?

Claude 最实在的一点是即使是普通用户&#xff0c;也能用到上传文件、上传图片这些功能&#xff08;只是用的模型比付费版性能差一些&#xff0c;对普通用户开放的是 Sonnet 版本&#xff0c;付费用户是 Opus 版本&#xff09;。 但是 ChatGPT 就不行&#xff0c;免费的 GPT-3…

唯众物联网+地理科学交付云南师范大学地理学部教学实验室项目

近日&#xff0c;云南师范大学地理学部教学实验室建设项目顺利交付。该项目的成功落地&#xff0c;标志着物联网技术与地理科学教育的深度融合&#xff0c;为云南师范大学的地理教学提供了全新的教学平台与资源。该项目以物联网技术为核心&#xff0c;结合地理科学的特点&#…

UI 学习 二 可访问性 模式

一 颜色对比 颜色和对比度可以用来帮助用户看到和理解应用程序的内容&#xff0c;与正确的元素交互&#xff0c;并理解操作。 颜色可以帮助传达情绪、语气和关键信息。可以选择主色、辅助色和强调色来支持可用性。元素之间足够的颜色对比可以帮助低视力的用户看到和使用你的应…

Qt QDateTime类使用

一.Qt datetime 介绍 Qt中的QDateTime类是用于处理日期和时间的组合的类&#xff0c;它提供了丰富的功能来操作和格式化日期时间数据。以下是其主要特点和用法&#xff1a; 构造函数&#xff1a;QDateTime可以通过组合QDate&#xff08;日期&#xff09;和QTime&#xff08;时…
最新文章