首页 > 其他分享 >关于Vue2和Vue3的区别及组合式/选项式API区别——高频面试题

关于Vue2和Vue3的区别及组合式/选项式API区别——高频面试题

时间:2024-09-06 10:52:18浏览次数:11  
标签:面试题 区别 代码 逻辑 Options API Vue3 Composition

1、vue2和vue3的区别

  • 以下包含但不仅仅只有这10条区别
  • 但是,在应对面试时,回答已经足够用了,这些也是vue2和vue3的主要区别
  1. Composition API vs Options API
    • Composition API:组合式API
    • Options API:选项式API——在vue2中使用
    • 它们两者在vue3中是组织代码的不同方式
    • Vue3引入了Composition API,更灵活、易于组织代码,相较于Vue2的Options API更具优势。
  2. 性能优化
    • Vue3在虚拟DOM和响应式系统方面进行了多项性能优化,提升了页面加载速度和渲染效率。
    • 使用了更高效的算法减少了不必要的dom更新
    • 使用了proxy对属性的变化进行监听,并在需要进行页面更新的时候批量的进行操作
  3. TypeScript支持
    • 简称TS——它其实就是一种静态类型的检查工具,方便在开发的时候就发现问题
    • Vue3更好地支持TypeScript,提供更好的类型检查和推断,有助于减少潜在错误。
  4. 新增功能
    • Vue3引入了Teleport、Suspense等新功能,简化了处理复杂逻辑和异步操作的方式。
    • 方便的把组件中的一些dom模板移动到dom树中的任何内容、任何位置
  5. 树型组件优化
    • Vue3优化了树型组件的性能,特别是对于大型列表的渲染,表现更为出色。
  6. 全局API调整
    • Vue3对全局API进行了调整和统一,使整个框架更加一致和易于理解。
  7. 包大小优化
    • Vue3的包大小相较于Vue2有所减小,剔除了一些冗余代码,提升了整体性能。
  8. Tree-shaking效果
    • Vue3采用ES模块组织代码,优化了Tree-shaking的效果,减少了不必要的代码被打包到生产环境。
    • Tree-shaking:打包编译时把一些不必要的代码自动剔除掉
  9. 更佳的响应式原理
    • Vue3重新设计了响应式系统,使变化侦测更加精确高效,提供更出色的性能表现。
  10. 逻辑复用与共享
    • Composition API让逻辑复用和共享更加便捷灵活,让代码组织更加清晰和高效。
  • 注意:以上不是所有的区别内容
    ○ 但是,面试回答已经足够用了,也是主要的区别

2、组合式/选项式API区别

  • 对比Composition APIOptions API,及Composition API优点缺点
  • 注意:vue3两种API是都支持的!
    • 选项式API
      • 在简单应用和迁移现有项目时可能更方便——也就是:处理一些简单的组件,或者是快速开发的时候更方便、更有用
    • 组合式API
      • 则在需要更好的代码组织和重用时更具优势——也就是:高度复用的一些逻辑场景
  • Vue 3的设计目标之一是:保持向后兼容性,因此它完全支持这两种编写方式,使开发者可以灵活地选择适合自己项目的方式。

2.1、对比

  1. 组织方式
    • Composition API以函数的形式组织代码,将相关逻辑聚合在一起,提高代码的可读性和可维护性;
    • 而Options API将数据、计算属性和方法等放置在同一个选项对象中,可能导致代码在不同选项中分散,降低可读性和可维护性。
  2. 逻辑复用
    • Composition API更便于逻辑的复用和共享,通过函数的方式组织代码,使得在不同组件之间高效共享逻辑代码,提高代码重用性;
    • 而Options API相对而言,逻辑复用需要更多的手动努力和处理。
  3. 类型推断
    • Composition API对于使用强类型语言(如TypeScript)的开发者更友好,具有更好的类型推断能力,可以发现潜在的类型错误,提高代码质量和稳定性;
    • 而Options API的类型推断能力相对较弱。

2.2、Composition API的优点

  1. 逻辑复用
    • Composition API使逻辑复用变得更加方便,可以更高效地在不同组件中共享代码。
  2. 清晰的代码结构
    • 通过根据逻辑关注点组织代码,Composition API可以获得更清晰、易于理解的代码结构,有助于团队协作和代码维护。
  3. 更好的类型推断
    • Composition API在使用强类型语言时具有更好的类型推断能力,能够帮助开发者及早发现和避免潜在的类型错误。

2.3、Composition API的缺点

  1. 学习曲线较陡
    • 对于已经熟悉Options API的开发者来说,适应和学习Composition API可能需要一定的时间和努力,因为它涉及到不同的用法和思维方式。
  2. 开发者之间的转换成本
    • 如果团队中的开发者之间在不同项目中频繁切换,从Options API转换到Composition API可能会带来额外的学习和适应成本。

2.4、示例

  • 需求:假设我们有一个页面上的计数器需求,点击按钮时实现数量加一的功能。
  • 以下是使用Composition APIOptions API实现同样功能的示例代码:
2.4.1、Composition API(组合式)示例
// 1、html结构
    <template>
       <button @click="increment">Click to Increment: {{ count }}</button>
    // 1)再次创建按钮 => 执行减减操作
       <button @click="incrementb">Click to Increment: {{ count }}</button>
    </template>

// 2、js逻辑
    <script>
       import { ref } from 'vue';
       export default {
         setup() {
            const count = ref(0); // 这个变量使用ref创建的 => vue3中响应式数据,使用ref来创建
            const increment = () => {
              count.value++;
            };
      // 2)当还需要再写一个自减的类似逻辑时,可以把相同的逻辑和相同的变量写在一起 
      // 3)一组组的逻辑放在一起,今后在剥离逻辑或重用逻辑的时侯,相同的功能写在一起,也就增加了代码可读性
            const countb = ref(0); // 这个变量使用ref创建的 => vue3中响应式数据,使用ref来创建
            const incrementb = () => {
              count.value--;
            };
            return {
              count,
              increment
            };
         }
      };
    </script>
2.4.2、Options API(选项式)示例
// 1、html结构
    <template>
      <button @click="increment">Click to Increment: {{ count }}</button>
    </template>
      
// 2、js逻辑
    <script>
      export default {
        data() {
          return {
            count: 0
          };
        },
        methods: {
          increment() {
            this.count++;
          }  
        }
      };
    </script>
2.4.3、结论
  1. 在以上示例中,可以看到Composition API将相关逻辑集中在一起,使得代码更易于理解和维护
    • 当需要再次增加一个按钮时,不管是完全相同的逻辑,还是类似的逻辑,把它们写在一起时,可以大大提升代码的可读性
    • 比如,都是用到了某个变量,那么就不需要再次单独在声明变量,可以直接使用
    • 注意:按钮逻辑复杂度增加时,将它们写在一起可能会导致代码过于臃肿和难以理解,按钮之间的逻辑并不相关,将它们放在一起可能会导致代码结构混乱,不利于后续维护和修改,这里是AI给予的提醒
  2. Options API则可能导致代码分散在不同选项中,降低了代码的清晰度和可读性。
    • 当相同逻辑增加时,如果选择在methods中增加方法,会导致代码量越来越大
    • 同样,如果需要对某个数据进行递减,就需要再次在data中声明变量,那么随着项目的变大,变量也会越写越多,但其实数据用的都是一个

标签:面试题,区别,代码,逻辑,Options,API,Vue3,Composition
From: https://blog.csdn.net/2301_78675670/article/details/141953078

相关文章

  • JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别
    JavaScript中structuredClone和JSON.parse(JSON.stringify())克隆对象的异同点一、什么是structuredClone?1.structuredClone的发展structuredClone是在ECMAScript2021(ES12)标准中引入的,ECMAScript2021规范正式发布于2021年6月自2022年3月起,该功能适用于最......
  • java面试题(Spring、Spring MVC)
    点赞关注+收藏,万分感谢!!Spring1、为什么要使用spring?spring提供ioc技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。spring提供了事务支持,使得事务操作变的更加方便。spring提供了面向切片编程,这样可以更方便的处理某一类......
  • 如何使用京东JD商品SKU信息API进行商品信息查询和提取
    1.API调用方法概述京东JD商品SKU信息API通常用于查询特定SKU(StockKeepingUnit)的商品详细信息。在调用API之前,你需要确保已经注册成为京东开发者,并获得了相应的API权限和访问密钥。API调用方法:HTTP方法:通常是GET或POST,具体取决于API的要求。URL:API的端点URL,从京东开放平台......
  • 电商数据API对店群商家有哪些优势
    电商数据API对店群商家而言,具有多方面的显著优势,这些优势能够帮助商家在激烈的市场竞争中脱颖而出,实现更高效、精准的运营和管理。以下是对这些优势的具体阐述:数据实时性与准确性:电商数据API能够直接对接电商平台的数据源,确保商家获取的数据是实时且准确的。这有助于商家......
  • 揭秘如何通过淘宝API接口高效获取商品数据
    在电子商务的世界里,数据就是力量。对于淘宝卖家来说,掌握店铺商品的全面数据是优化运营策略、提升销售业绩的关键。淘宝API,作为连接淘宝平台与外部应用的桥梁,提供了一键获取店铺所有商品的魔法钥匙。本文将带您踏上一场探秘之旅,揭秘如何利用淘宝API高效获取商品数据。一、淘宝API......
  • fastapi middleware中间件
    一、介绍FastAPI中的中间件(Middleware)是一个非常重要的概念,它允许开发者在请求被处理之前和响应被发送之前执行自定义逻辑。中间件在Web应用程序中扮演着桥梁的角色,连接着客户端的请求和服务器端的响应处理过程。以下是FastAPI中间件概念的详细解释:1.中间件的定义在FastAPI中,......
  • python 深/浅拷贝及其区别
    概述1、什么是浅拷贝?浅拷贝是指创建一个新的数据结构对象,该对象是原始数据结构的副本,但不复制原始数据结构中的嵌套对象的引用。浅拷贝可以通过各种方式完成,如切片、工厂函数或copy模块的copy方法。2、什么是深拷贝?深拷贝是指创建一个新的数据结构对象,该对象是原始数据结构及......
  • Spring、SpringMVC、SpringBoot都是什么,有什么区别
    Spring、SpringMVC、SpringBoot都是什么,有什么区别Spring:是一个轻量级的基于IOC和AOP的容器框架,是用来简化开发流程的一套框架。IOC:InversionofController控制反转。不好理解的概念:应用不负责依赖对象的创建,而是把它们创建的控制器交给外部容器,这种控制权的转移就是控......
  • freeRTOS面试题目 面经 单片机面经汇总MCU RTOS常见面试经验汇总 freeRTOS消息队列 信
    常见rtos部分Linux题目汇总FreeRtos面经30题前后台程序与实时操作系统的区别是什么?实时系统的基本特性有哪些?什么是不可剥夺型内核?它的特点是什么?可剥夺型内核的定义及适用场景是什么?什么是可重入型函数?它有什么特点?使用可剥夺型内核时,为什么不应直接使用不可重入型函数......
  • QT教程:start()和startTimer()的区别
    start()-QTimer类的成员函数        start()是QTimer类的成员函数,用于启动一个基于QTimer对象的定时器。QTimer是Qt中常用的定时器类,它会在设定的时间间隔后发出timeout()信号。用法QTimertimer;timer.start(1000);//每隔1000毫秒触发一次time......