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

对比 Vue2 选项式 API 与 Vue3 setup 语法

对比 Vue2 选项式 API 与 Vue3 setup 语法

1. 代码组织方式
  • Vue2 选项式 API
    通过独立的选项(data, methods, computed, watch, 生命周期钩子等)组织代码。

    export default {
      data() {
        return { count: 0 };
      },
      methods: {
        increment() { this.count++; }
      },
      mounted() { console.log('Component mounted'); }
    }
    

    问题:逻辑分散,一个功能的代码可能分布在多个选项中。

  • Vue3 setup 语法
    使用 Composition API 在 setup 函数内按逻辑组织代码,相关功能集中编写。

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

    优势:逻辑内聚,便于复用(通过自定义 Hook)。


2. 响应式数据
  • Vue2
    使用 data 返回对象,Vue 自动递归处理为响应式。

    data() {
      return { user: { name: 'Alice' } };
    }
    
  • Vue3
    显式使用 ref(基本类型)或 reactive(对象)创建响应式数据。

    const count = ref(0); // 通过 .value 访问
    const user = reactive({ name: 'Alice' }); // 直接访问属性
    

3. 生命周期钩子
  • Vue2
    直接在选项中定义钩子(如 mounted, created)。

    mounted() { console.log('Mounted'); }
    
  • Vue3
    vue 导入钩子函数(如 onMounted),在 setup 中使用。

    import { onMounted } from 'vue';
    setup() {
      onMounted(() => { console.log('Mounted'); });
    }
    

4. 事件与 this
  • Vue2
    通过 this 访问数据/方法,使用 this.$emit 触发事件。

    methods: {
      handleClick() { this.$emit('click'); }
    }
    
  • Vue3
    setupthis,通过 context.emit 触发事件。

    setup(props, { emit }) {
      const handleClick = () => { emit('click'); };
      return { handleClick };
    }
    

5. 计算属性与侦听器
  • Vue2
    使用 computedwatch 选项。

    computed: {
      doubled() { return this.count * 2; }
    },
    watch: {
      count(newVal) { console.log(newVal); }
    }
    
  • Vue3
    使用 computedwatch 函数。

    import { computed, watch } from 'vue';
    setup() {
      const doubled = computed(() => count.value * 2);
      watch(count, (newVal) => { console.log(newVal); });
      return { doubled };
    }
    

setup 语法核心优势

  1. 逻辑复用
    通过自定义 Hook(如 useMouseTracker)封装逻辑,轻松跨组件复用。
  2. 更好的 TypeScript 支持
    类型推断更友好,减少 this 的隐式类型问题。
  3. 更灵活的代码组织
    相关逻辑集中管理,提升复杂组件的可维护性。

常见问题与技巧

  • 响应式丢失:解构 reactive 对象需用 toRefs
    const user = reactive({ name: 'Alice' });
    const { name } = toRefs(user); // 保持响应式
    
  • Ref vs Reactive
    • ref 适用于基本类型,通过 .value 访问。
    • reactive 适用于对象,直接修改属性。

总结

  • 选项式 API:适合简单场景,结构直观但逻辑分散。
  • setup 语法:适合复杂组件,逻辑集中且易于复用,需掌握响应式 API 的使用。

相关文章:

  • Ubuntu 22.04使用pigz多线程快速解压/压缩文件
  • 【MySQL基础-3】SQL语言详解:定义、分类、注意事项与注释
  • 【Python】06、流程控制语句
  • 系统开发资源
  • 大模型AI相关记录
  • sql靶场--布尔盲注(第八关)保姆级教程
  • OpenHarmony-分布式硬件关键技术
  • 2025-03-12 Python深度学习1——安装Anaconda与PyTorch库
  • 在 C# 中,is null 和 == null ‌不完全等价‌
  • 《算法篇:翻转字符串里的单词 - Java 多种解法详解》
  • IMX6ULL驱动开发Linux篇01
  • UFW 配置 Ubuntu 防火墙并设置防火墙规则
  • 基于MATLAB的冰块变化仿真
  • C#核心笔记——(五)框架概述
  • K8S中PV和PVC之间的关系
  • 大语言模型-1.2-大模型技术基础
  • css -学习
  • MySQL 数据归档自动化:Python + pt-archiver 打造高效运维利器
  • 【WebRTC---源码篇】(二十三_一)JitterBuffer运行流程
  • Python学习第十三天
  • 上海环球马术冠军赛开赛,一场体育与假日消费联动的狂欢
  • 日产淡水10万吨、全自动运行,万华化学蓬莱海水淡化厂投产
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海
  • 龚惠民已任江西省司法厅党组书记
  • 视频丨中国海警位中国黄岩岛领海及周边区域执法巡查