vue中选项式 API(Options API) 和 组合式 API(Composition API)区别

ops/2024/10/24 13:30:59/

在 Vue 中,选项式 API(Options API)组合式 API(Composition API) 是两种不同的编写组件逻辑的方式。它们的主要区别体现在代码组织、逻辑复用和灵活性上。以下是它们的详细对比:

1. 语法风格

  • 选项式 API

    • 传统 Vue 组件写法,使用一组选项(如 datamethodscomputedwatch 等)来定义组件的状态、逻辑和行为。
    • 每个选项都有自己专门的部分,逻辑上比较直观,但会让相关逻辑散布在不同的选项中。

    示例:

    export default {data() {return {count: 0};},methods: {increment() {this.count++;}},computed: {doubleCount() {return this.count * 2;}}
    }
    

  • 组合式 API

    • 引入自 Vue 3,使用 setup 函数来组合逻辑,允许开发者将与某一功能相关的代码组合在一起,不再受选项划分的限制。
    • 提供更灵活的逻辑组织方式,特别适合复杂应用中的代码复用和模块化。

    示例:

    import { ref, computed } from 'vue';export default {setup() {const count = ref(0);const increment = () => count.value++;const doubleCount = computed(() => count.value * 2);return { count, increment, doubleCount };}
    }
    

2. 代码组织

  • 选项式 API

    • 代码按照功能类型组织:data 定义数据,methods 定义方法,computed 定义计算属性等。
    • 缺点是当组件逻辑复杂时,相关功能的代码可能分散在不同的选项块中,不易于维护。

    **例子:**当一个功能涉及到 datamethods 时,它们分别存在于不同的部分中,阅读或维护时需要在这些部分之间跳转。

  • 组合式 API

    • 代码按照逻辑功能来组织,将相关逻辑(状态、方法、计算属性等)集中在一起,更加模块化。
    • 优点是当组件逻辑复杂时,相关的代码可以紧密组织在一起,易于维护和复用。

3. 逻辑复用

  • 选项式 API

    • 如果需要复用逻辑,通常依赖于 mixinsVue.extend,但 mixins 有命名冲突和逻辑来源不明确的问题。
    • 多个 mixins 可能导致代码变得复杂,不利于清晰的逻辑结构。
  • 组合式 API

    • 提供了 composables(可组合函数)的方式,将逻辑封装成函数,方便在多个组件之间复用。
    • 没有 mixins 的复杂性,逻辑清晰且灵活。

    示例:创建一个可复用的计数逻辑:

    // useCounter.js
    import { ref } from 'vue';export function useCounter() {const count = ref(0);const increment = () => count.value++;return { count, increment };
    }// 在组件中使用
    import { useCounter } from './useCounter';export default {setup() {const { count, increment } = useCounter();return { count, increment };}
    }
    

4. TypeScript 支持

  • 选项式 API
    • 虽然可以与 TypeScript 配合使用,但由于各个选项部分是分开的,因此对类型推断和类型检查的支持相对较弱。
    • 复杂项目中使用 TypeScript 时,可能需要大量手动注释类型。
  • 组合式 API
    • 与 TypeScript 有更好的集成,尤其是在 setup 函数中,使用类型推断和显式类型声明非常自然。
    • 因为逻辑是集中在函数中,类型声明可以直接在函数参数和返回值中体现,类型推断更加准确和灵活。

5. 生命周期钩子

  • 选项式 API

    • 生命周期钩子直接定义为组件选项,如 mountedcreated 等。

    示例:

    export default {mounted() {console.log('Component mounted');}
    }
    

  • 组合式 API

    • setup 函数中使用生命周期钩子 API,比如 onMountedonUpdated 等。

    示例:

    import { onMounted } from 'vue';export default {setup() {onMounted(() => {console.log('Component mounted');});}
    }
    

6. 可读性和学习曲线

  • 选项式 API
    • 对于 Vue 初学者来说更直观,因为它以明确的选项块组织代码,结构清晰,易于理解。
    • 适合中小型项目或功能相对简单的应用。
  • 组合式 API
    • 对于初学者来说可能有一定的学习曲线,因为 setup 函数中将所有逻辑集中在一起,代码组织更加灵活。
    • 适合大型项目或功能复杂的应用,代码复用性更好。

7. 灵活性

  • 选项式 API
    • 相对固定的结构,在开发简单应用时足够使用,但面对复杂逻辑,复用和扩展较为困难。
  • 组合式 API
    • 提供了极大的灵活性,开发者可以按照功能模块自由组织代码,特别适合拆分复杂业务逻辑、增强代码可复用性。

总结

特性选项式 API组合式 API
语法风格通过选项(datamethodscomputed 等)通过 setup 函数组织逻辑,灵活自由
代码组织逻辑分散到不同选项块,直观但分散逻辑可以集中,适合复杂应用
逻辑复用通过 mixins 实现,但存在命名冲突问题通过组合函数复用逻辑,灵活且清晰
TypeScript 支持支持但较为局限原生支持更好,类型推断更精确
生命周期钩子使用选项 mountedcreatedsetup 中使用 onMounted 等 API
学习曲线易于上手,适合初学者需要一些学习成本,但适合复杂项目
适用场景小型项目,逻辑简单中大型项目,逻辑复杂,代码复用性强
  • 选项式 API 更适合新手和简单项目,代码逻辑较为直观和易维护。
  • 组合式 API 提供了更强的灵活性和复用能力,特别适合大型项目和复杂的业务逻辑。

http://www.ppmy.cn/ops/128084.html

相关文章

flask-socketio-+Nginx反向代理在会议点名上的用作消息收发和提醒

配置 nginx 让socket.io 顺利走到后方,因为 这个 io只认一级目录,socket.io 但是的 server 是由path 参数可做设定的. 我觉他client也能吧.只是二级目录有点太绕.不去试了 1.1.1.30 :9000 nginx转到 1.1.1.25:7005 socketio, app http {# 基本…

2024-10-23 问AI: [AI面试题] 什么是卷积神经网络 (CNN)?

文心一言 卷积神经网络(Convolutional Neural Network,简称CNN)是一种专门用于处理具有网格状拓扑结构数据的深度学习模型,尤其是图像数据。这种网络结构由多层组成,可以自动和适应性地学习从输入数据中提取高层次的特…

SSM(一对多和多对多)

一对多: 背景: 一个用户有多个订单,订单的用户只有一个人。 属性: 首先是在User实体类里面封装一个Order(订单类)的集合。 userMapper接口: /*** 查看该用户的全部订单* 一对多的关系 因此返…

NCU-机器学习-作业4:基于XGboost的收入分类预测

输入数据: 在train/目录下包含一个train.csv文件,其中每行表示数据的一条记录。文件中每行共有18列,列income为收入分类(0表示小于等于50k,1表示大于50k)。其余各列为数据对象的各项参数特征(连续属性&…

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片,芯片通提供了很多 slot ,用于存放各类安全证书、密钥、用户数据等,内置…

线程的同步

目录 引入 认识条件变量 快速认识接口​编辑 认识条件变量​编辑 测试代码​编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步:在保证数据安全的前提下,让线程…

新王Claude 3.5的6大应用场景

Anthropic AI深夜发布了备受期待的Claude 3.5系列更新,包括了全新升级的Claude 3.5 Sonnet和首发的Claude 3.5 Haiku。 Claude 3.5 Sonnet能够理解细微的指令和上下文,识别并纠正自身错误,还能从复杂数据中生成深入的分析和洞察。 结合最先进…

蓝桥杯注意事项

蓝桥杯注意事项 比赛注意事项 能暴力枚举就暴力枚举,能用简单的思路做就尽量用简单的思路做。认真审核题目的题意和输入输出的要求,避免因为误解题意而导致题目错误。对于提供多组测试样例或者需要对一个过程重复进行循环的代码,要时刻记住…