当前位置: 首页 > news >正文

vue3学习日记(十四):两大API选型指南

Vue3 两大核心 API 详解

Vue3 的核心 API 分为 Options APIComposition API,两者设计理念不同,但可协同使用。


Options API

定义:基于对象声明的传统 Vue 写法,通过 datamethodscomputed 等选项组织代码。

核心特性:

  • 结构化清晰:逻辑按选项分类(如 data 存放数据,methods 存放方法)。
  • 易于上手:对新手友好,学习曲线平缓。
  • 向下兼容:Vue3 完全支持 Vue2 的写法。

使用场景:

  • 适合中小型项目或简单逻辑组件
  • 团队熟悉 Vue2 的迁移过渡期
  • 需要快速上手的场景

优点:

  • 结构清晰,代码按功能选项(如 datamethods)分类。
  • 学习曲线平缓,适合新手。

缺点:

  • 逻辑分散,复杂组件中代码可能难以维护。
  • 逻辑复用依赖 mixins,可能引发命名冲突。

基本用法:

<template><div>{{ count }}</div><button @click="increment">+1</button>
</template><script>
export default {data() {return { count: 0 }},methods: {increment() {this.count++}}
}
</script>

Composition API

定义:基于函数式编程的 API,通过 setup() 函数和响应式 API 组织代码。

核心特性:

  • 逻辑复用:通过自定义 Hook(如 useFetch)实现逻辑的封装和复用。
  • 代码组织:将相关逻辑集中在一个地方,而非分散在 datamethodscomputed 等选项中。
  • 更好的 TypeScript 支持:函数式风格更易于类型推导。

使用场景:

  • 复杂组件逻辑需要高复用性
  • TypeScript 深度集成需求
  • 需要逻辑关注点集中的大型项目

优点:

  • 逻辑聚合,相关代码可以集中编写。
  • 更好的逻辑复用(通过自定义组合函数)。
  • 更好的 TypeScript 集成。

缺点:

  • 学习成本较高,需要理解响应式系统。
  • 简单场景下可能显得冗余。

基本用法:

<template><div>{{ count }}</div><button @click="increment">+1</button>
</template><script>
import { ref } from 'vue'
export default {setup() {const count = ref(0)const increment = () => count.value++return { count, increment }}
}
</script>

核心函数

  • ref() / reactive() 创建响应式数据
  • computed() 创建计算属性
  • watch() / watchEffect() 实现侦听
  • 生命周期钩子前缀加 on(如 onMounted

选型建议

  1. 项目规模与复杂度

    • 小型项目或简单 UI 组件:优先使用 Options API。
    • 大型项目或复杂逻辑:选择 Composition API。
  2. 团队经验

    • 团队熟悉 Vue 2:可逐步过渡到 Composition API。
    • 新团队或全新技术栈:直接学习 Composition API。
  3. 逻辑复用需求

    • 需要高度复用逻辑(如状态管理、工具函数):Composition API 更灵活。
  4. TypeScript 支持

    • 需要强类型检查时,Composition API 更具优势。

典型场景对比

逻辑复用示例

// Composition API 复用逻辑
function useCounter(initialValue) {const count = ref(initialValue)const double = computed(() => count.value * 2)const increment = () => count.value++return { count, double, increment }
}// Options API 需通过 mixins 实现
const counterMixin = {data() {return { count: 0 }},methods: {increment() {this.count++}}
}

TypeScript 支持

// Composition API 类型推断更直接
interface Counter {count: Ref<number>increment: () => void
}function useCounter(): Counter {const count = ref(0)const increment = () => count.value++return { count, increment }
}


注意事项

Options API

  • 避免在 data 中直接使用箭头函数,否则 this 指向错误。
  • 生命周期钩子需按文档顺序声明,如 created 在 mounted 之前。

Composition API

  • ref 用于基本类型,reactive 用于对象,混用可能导致响应式丢失。
  • setup() 中无法直接访问 this,需通过参数获取上下文(如 props)。
  • 逻辑复用时应封装为自定义 Hook,命名建议以 use 开头(如 useFetch)。

总结

Vue 3 允许在同一项目中混合使用两种 API。例如,基础组件用 Options API,复杂业务逻辑用 Composition API。具体根据项目需求、团队熟悉度和长期维护性灵活选择,两者并非互斥。


文章转载自:

http://Q8pJUm7e.zmhkf.cn
http://wJE4jXkB.zmhkf.cn
http://r1QtgvBf.zmhkf.cn
http://JOuO26l2.zmhkf.cn
http://clJ0qxUB.zmhkf.cn
http://YiWxd30u.zmhkf.cn
http://DhU5tnrW.zmhkf.cn
http://IbDGFoRi.zmhkf.cn
http://t89fdjKv.zmhkf.cn
http://iut7ftpY.zmhkf.cn
http://HikQiSGj.zmhkf.cn
http://32urroDA.zmhkf.cn
http://FbmO7PJP.zmhkf.cn
http://A8bKnMud.zmhkf.cn
http://jx9T5gPn.zmhkf.cn
http://7hrZYiy3.zmhkf.cn
http://8PnpjUxe.zmhkf.cn
http://DN9grwCB.zmhkf.cn
http://RwjsN1Jm.zmhkf.cn
http://oGUFNqiL.zmhkf.cn
http://e61XmxaL.zmhkf.cn
http://XFHohOSl.zmhkf.cn
http://eyEJxV21.zmhkf.cn
http://pVFn4DTP.zmhkf.cn
http://dFASYwgB.zmhkf.cn
http://Su7zkPwa.zmhkf.cn
http://JnXyDwV2.zmhkf.cn
http://jA6h0JwN.zmhkf.cn
http://rFPjD1Ff.zmhkf.cn
http://xR7LqBC9.zmhkf.cn
http://www.dtcms.com/a/388624.html

相关文章:

  • 微信支付回调成功通知到本地
  • 量化交易 - Simple Regression 简单线性回归(机器学习)
  • Kubernetes控制器详解:从Deployment到CronJob
  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化
  • 【C语言】冒泡排序算法解析与实现
  • [GESP202309 三级] 进制判断
  • 【C++】const和static的用法
  • 箭头函数{}规则,以及隐式返回
  • brain.js构建训练神经网络
  • 开学季高效学习与知识管理技术
  • C++STL与字符串探秘
  • 【面试题】- 使用CompletableFuture实现多线程统计策略工厂模式
  • 打工人日报#20250917
  • LeetCode:12.最小覆盖字串
  • 【C++】 深入理解C++虚函数表与对象析构机制
  • C++ 中 ->和 . 操作符的区别
  • SQL CTE (Common Table Expression) 详解
  • 解决windows更新之后亮度条消失无法调节的问题
  • FPGA学习篇——Verilog学习译码器的实现
  • JavaScript Promise 终极指南 解决回调地狱的异步神器 99% 开发者都在用
  • AI智能体开发实战:从提示工程转向上下文工程的完整指南
  • jtag协议处理流程
  • 【LeetCode 每日一题】2749. 得到整数零需要执行的最少操作数
  • 《饿殍:明末千里行》Switch版试玩发布 3月13日发售
  • LeetCode:9.找到字符串中所有的字母异位词
  • Java获取淘宝商品详情数据的详细说明
  • PyTorch张量运算、索引与自动微分详解