【前端__VUE面试题__Vue3 的 Composition API 和 Vue2 的 Options API】

Vue3 的 Composition API 和 Vue2 的 Options API 在设计理念和代码组织方式上有显著差异,主要体现在以下几个方面:


  • 在逻辑组织和逻辑复用方面:Composition API是优于:0ptions API
  • 因为:Composition API!几乎是函数,会有更好的类型推断,
  • Composition API 对:tree-shaking:友好,代码也更容易压缩
  • Composition API中见不到:this 的使用,减少了:this 指向不明的情况
  • 如果是小型组件,可以继续使用:0ptionsAPI:,也是十分友好的

对比表

特性Options APIComposition API
代码组织按选项类型分割按逻辑功能聚合
逻辑复用Mixins(易冲突)自定义函数(高内聚)
TypeScript 支持较弱
响应式控制隐式显式(ref/reactive)
生命周期管理选项式声明函数式调用
适用场景简单组件复杂组件或大型项目

核心优势

  • Composition API 更适合大型项目,通过逻辑聚合和复用提升代码可维护性,同时提供更好的 TypeScript 支持和响应式控制。
  • Options API 更简单直观,适合中小型项目或新手快速上手。

1. 代码组织方式

  • Options API
    代码按选项类型分割为 datamethodscomputedwatch、生命周期钩子等。同一功能的逻辑可能分散在不同选项中,导致复杂组件的代码阅读和维护困难。
    示例:

    export default {
      data() { return { count: 0 } },
      methods: { increment() { this.count++ } },
      mounted() { console.log('Mounted') }
    }
    
  • Composition API
    通过 setup() 函数按逻辑功能组织代码,将同一功能的响应式数据、方法、计算属性等集中在一起,提升内聚性。
    示例:

    import { ref, onMounted } from 'vue';
    export default {
      setup() {
        const count = ref(0);
        const increment = () => { count.value++ };
        onMounted(() => { console.log('Mounted') });
        return { count, increment };
      }
    }
    

2. 逻辑复用能力

  • Options API
    通过 mixins 或作用域插槽复用逻辑,但存在命名冲突数据来源不透明等问题,尤其在多个 mixins 混合时难以调试。

  • Composition API
    通过自定义的 Composition 函数(如 useCounter())封装逻辑,实现高内聚、低耦合的复用,避免命名冲突,且代码来源清晰。
    示例:

    // 复用逻辑的 Composition 函数
    function useCounter() {
      const count = ref(0);
      const increment = () => { count.value++ };
      return { count, increment };
    }
    
    // 在组件中复用
    export default {
      setup() {
        const { count, increment } = useCounter();
        return { count, increment };
      }
    }
    

3. TypeScript 支持

  • Options API
    依赖 this 上下文访问数据,类型推导较为困难,需额外类型声明。

  • Composition API
    基于函数式编程,天然支持类型推断,结合 ref<T>reactive<T> 等 API 可轻松实现类型安全。


4. 响应式系统

  • Options API
    隐式依赖 Vue2 的响应式系统(基于 Object.defineProperty),数据定义在 data() 中,响应式细节被封装。

  • Composition API
    显式使用 Vue3 的响应式 API(基于 Proxy),如 refreactivecomputed 等,提供更细粒度的控制。


5. 生命周期钩子

  • Options API
    生命周期钩子作为独立选项(如 mountedcreated)。

  • Composition API
    生命周期钩子以函数形式在 setup() 中调用(如 onMountedonUpdated),支持更灵活的逻辑组合。


6. this 的指向

  • Options API
    依赖 this 访问组件实例的属性和方法,可能导致上下文理解困难。

  • Composition API
    setup() 中没有 this,通过参数(如 propscontext)和返回值暴露数据,减少隐性依赖。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值