当前位置: 首页 > 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 的使用。
http://www.dtcms.com/a/65227.html

相关文章:

  • 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学习第十三天
  • Stable Diffusion F.1模型全面解析
  • Selenium 自动化测试学习总结
  • Web 品质样式表:提升网页视觉效果与用户体验的秘诀
  • hadoop集群配置-ssh无密登陆
  • 3.11记录
  • 美团AI面试面经
  • Microsoft Dragon Copilot:医疗AI革命开启,用语音终结手写病历时代
  • jQuery干货
  • 网络接口松动为什么会导致高延迟
  • Linux:多线程(单例模式,其他常见的锁,读者写者问题)