首页 > 其他分享 >前端面试题-vue2和vue3的区别

前端面试题-vue2和vue3的区别

时间:2024-03-18 22:58:05浏览次数:30  
标签:面试题 vue3 API vue2 使用 defineProperty 属性

监测机制的改变

vue2对数据监测使用的是Object.definePropert()对数据进行劫持结合发布订阅者模式来实现

vue3通过使用proxyAPI对数据直接进行代理。

vue3优于vue3的的地方就是:

vue3的proxyAPI监测的是整个对象,而不再是某个属性

消除了 Vue 2 当中基于 Object.defineProperty 的实现所存在的很多限制

不用在单独对数组进行操作,可以监听到数组内的变化

支持碎片化

vue2只有一个根节点,不支持碎片化,在模板中如果使用多个根节点时会报错

vue3可以同时拥有多个根节点(Fragments),支持碎片化

API不同

vue2使用选项式API(Options API),选项型api在代码里分割了不同的属性:data,computed,methods等

vue3使用组合式API(Composition API),新的合成型api能让我们使用方法来分割,相比于旧的api使用属性来分组,这样代码会更加简便和整洁

vue3兼容了vue2的选项式API,也就是在vue3中可以使用选项式API,也可以使用组合式API

建立数据的方式不同

Vue2:这里把数据放入data属性中

Vue3:需要使用一个新的setup()方法,此方法在组件初始化构造的时候触发。使用以下三步来建立响应式数据:

从vue引入ref或reactive

简单数据类型使用ref()方法处理,复杂类型数据用reactive()处理

使用setup()方法来返回我们的响应性数据,从而我们的template可以获取这些响应性数据

生命周期不同

vue3的生命周期在调用之前需要先引入,vue的不需要

Vue2                                  Vue3

初始化阶段:

beforeCreate ------------------ setup() 

created -------------------------- setup()

beforeMount -------------------- onBeforeMount

mounted -------------------------- onMounted 

更新阶段:

beforeUpdate ------------------ onBeforeUpdate 

updated ------------------------- onUpdated 

activated ---------------------- onActivated 

deactivated ------------------- onDeactivated

销毁阶段:

beforeDestroy ---------------- onBeforeUnmount 

destroyed ---------------------- onUnmounted 

父子传参不同

vue2中父子传参:父传子props,子传父$emit,调用$emit传入事件名和对象

vue3中父子传参:父传子props,子传父$emit,在setup函数中的第二个参数content对象中就有emit

因为vue3中没有this,所以vue3中的子传父 和vue2的略有区别,不过也更方便使用

指令与插槽不同

vue2中可以直接使用slot,v-for和v-if优先级v-for高,两者尽量不同时使用

 vue3中必须使用v-slot的形式,v-for和v-if优先级v-if高,两者不冲突

defineProperty和proxy的区别

Vue 在实例初始化时遍历 data 中的所有属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。并 劫持各个属性 getter 和 setter,在数据变化时发布消息给订阅者,触发相应的监听回调,而这之间存在几个问题

  • 初始化时需要遍历对象所有 key,如果对象层次较深,性能不好
  • 通知更新过程需要维护大量 dep 实例和 watcher 实例,额外占用内存较多
  • Object.defineProperty 无法监听到数组元素的变化,只能通过劫持重写数方法
  • 动态新增,删除对象属性无法拦截,只能用特定 set/delete API 代替
  • 不支持 Map、Set 等数据结构

Vue3 使用 Proxy 来监控数据的变化。Proxy 是 ES6 中提供的功能,其作用为:用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。相对于Object.defineProperty(),其有以下特点:

  1. Proxy 直接代理整个对象而非对象属性,这样只需做一层代理就可以监听同级结构下的所有属性变化,包括新增属性和删除属性。
  2. 它的处理方式是在 getter 中去递归响应式,这样的好处是真正访问到的内部属性才会变成响应式,简单的可以说是按需实现响应式,减少性能消耗。
  3. Proxy 可以监听数组的变化

标签:面试题,vue3,API,vue2,使用,defineProperty,属性
From: https://blog.csdn.net/weixin_74100422/article/details/136823722

相关文章

  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • Vue3+El-Dialog实现弹框
    1.子组件childComponents.vue<template><divclass="hello">{{`在学习VUE3`}}</div><el-dialogtitle="提示"v-model="dialogVisble"width="30%"><span>这是一段信息</span><templat......
  • 前端面试题合集附答案(问题来源BOOS直聘)
    1,vue的双向绑定原理是什么?里面的关键点在哪里?    1,数据劫持    vue通过Object.defineProperty()方法劫持数据对象属性上的getter和setter,从而实现数据的监听和更新    2,观察者模式    vue采用观察者模式实现对数据的监听和更新,当数据发生变......
  • vue2 nuxt打包时间超过1小时异常
    使用 npmrungenerate打包时提示:Thecommand'nuxtgenerate'finishedbutdidnotexitafter5s││ThisismostlikelynotcausedbyabuginNuxt││Makesuretocleanupalltimersandlistenersyouoryour││plugins/modu......
  • 2024年深度之眼--科研助理面试题
    深度之眼--科研助理面试题请将答案写在每道题的后面,Word文档命名为自己的名字,通过邮件/微信回复提交。一、选择题1.如何安装pytorch?(A)A使用pipB使用apt-getC下载源代码变异D无法安装2.pytorch中张量的阶数表示什么?(C)A张量的大小B张量的形状C张量的维度D......
  • 在Tomcat下部署若依框架前后端分离SpringBoot+Vue3项目
     一、后端打包在ruoyi项目的bin目录下执行package.bat打包Web工程,生成war/jar包文件。然后会在项目下生成target文件夹包含war或jar1.jar包使用命令行执行:java–jarruoyi-admin.jar或者执行脚本:ruoyi/bin/run.bat注意事项【jar包部署,需要使用nginx代理,前端项目中的代理仅......
  • vue3+threejs新手从零开发卡牌游戏(二):初始化场景
    在删掉初始化中一些没用的代码后,在views目录下新建game文件夹,在里面新建一个index.vue,这里就当成游戏的主入口。目录结构如下:下面开始尝试创建场景:一、添加一个div作为threejs的画布对象,之后整个的主要游戏开发内容全在这一个div中(实际threejs会渲染成canvas),并调整样式铺满......
  • Java面试问题集合,Java面试题合集
    前言:说到算法,相信每一个程序员和接触过程序员的朋友都不会陌生,直到现在算法一直占着面试必问的地位,而算法面试也仍是当前最适合公司筛选程序员的方法之一,在阿里,字节跳动、华为等公司带动下,无论是求职者还是面试官,都逐渐认识到算法面试其实是相对高效、准确且公平的筛选机制......
  • 2024Android研发必问高级面试题,,谈谈Android-Binder机制及AIDL使用
    中高级Android需要的知识技能技能:1.了解android的签名机制(实现原理,具体操作等等),打包机制(多渠道打包,打包流程等等)2.了解apk安装文件压缩(压缩图片,代码压缩,.so文件压缩等等)3.事件分发,View绘制流程,webview相关知识点(与Native的交互,性能优化等)4.熟悉数据库的使用(基本API,第三......
  • vite打包分包vue3
    //https://vitejs.dev/config///vite.config.jsexportdefaultdefineConfig({plugins:[vue(),vueJsx()],resolve:{alias:{'@':fileURLToPath(newURL('./src',import.meta.url))}},css:{preprocessorOptio......