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

Vue的组合式API和选项式API有什么区别

Vue3的组合式API(Composition API)和选项式API(Options API)是两种不同的组件编写方式,主要区别如下:


1. 代码组织方式

  • 选项式API
    按照选项(如datamethodscomputed等)组织代码,逻辑分散在不同选项中。

    export default {data() {return { count: 0 }},methods: {increment() {this.count++}}
    }
  • 组合式API
    按照逻辑功能组织代码,相关逻辑集中在一起,便于复用和维护。

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

2. 逻辑复用

  • 选项式API
    逻辑复用依赖mixins,容易导致命名冲突和来源不清晰。

    const myMixin = {data() { return { sharedData: 'value' } }
    }
    export default {mixins: [myMixin]
    }
  • 组合式API
    通过自定义Hook函数实现逻辑复用,清晰且灵活。

    // useCounter.js
    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 }}
    }

3. 响应式数据

  • 选项式API
    数据定义在data选项中,Vue自动使其响应式。

    data() {return { message: 'Hello' }
    }
  • 组合式API
    使用refreactive显式定义响应式数据。

    import { ref, reactive } from 'vue'
    export default {setup() {const message = ref('Hello')const state = reactive({ name: 'Vue3' })return { message, state }}
    }

4. this上下文

  • 选项式API
    通过this访问数据和方法。

    methods: {logMessage() {console.log(this.message)}
    }
  • 组合式API
    无需this,直接访问变量和函数。

    setup() {const message = ref('Hello')const logMessage = () => console.log(message.value)return { message, logMessage }
    }

5. 适用场景

  • 选项式API
    适合简单场景或初学者,代码结构直观。
  • 组合式API
    适合复杂场景,逻辑复用和代码组织更灵活。

总结

  • 选项式API:简单易用,适合小型项目或初学者。
  • 组合式API:灵活强大,适合大型项目或需要逻辑复用的场景。

根据项目需求和个人偏好选择合适的方式即可。

http://www.lryc.cn/news/542741.html

相关文章:

  • ubuntu 安全策略(等保)
  • c/c++蓝桥杯经典编程题100道(22)最短路径问题
  • AI工具集合
  • CSDN 博客:CC++ 内存管理详解
  • 表单制作代码,登录动画背景前端模板
  • 嵌入式项目:STM32刷卡指纹智能门禁系统
  • LeetCode 热题100 141. 环形链表
  • 以绘图(绘制点、直线、圆、椭圆、多段线)为例子 通过设计模式中的命令模式实现
  • 鹏哥c语言数组(初阶数组)
  • 利用go-migrate实现MySQL和ClickHouse的数据库迁移
  • 计算机毕业设计SpringBoot+Vue.js企业客户管理系统(源码+LW文档+PPT+讲解+开题报告)
  • jmeter 如何做移动端的测试 特别是兼容性测试
  • 深度学习技术全景图:从基础架构到工业落地的超级进化指南
  • vllm部署LLM(qwen2.5,llama,deepseek)
  • 基于SpringBoot的“古城景区管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 如何防止 Docker 注入了恶意脚本
  • 使用python接入腾讯云DeepSeek
  • 【MySQL】服务正在启动或停止中,请稍候片刻后再试一次【解决方案】
  • 测试工程师玩转DeepSeek之Prompt
  • 【PyTorch】2024保姆级安装教程-Python-(CPU+GPU详细完整版)-
  • 精选案例展 | 智己汽车—全栈可观测驱动智能化运营与成本优化
  • MySQL 使用 `WHERE` 子句时 `COUNT(*)`、`COUNT(1)` 和 `COUNT(column)` 的区别解析
  • Linux运维——网络管理
  • STM32CUBEIDE FreeRTOS操作教程(十三):task api 任务访问函数
  • Jmeter+Jenkins接口压力测试持续集成
  • 深入浅出ES6:现代JavaScript的基石
  • 实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能
  • 潜水泵,高效排水,守护城市与农田|深圳鼎跃
  • 易基因:RNA甲基化修饰和R-loop的交叉调控:从分子机制到临床意义|深度综述
  • 115 道 MySQL 面试题,从简单到深入!