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

Vue 2 和 Vue 3的比较(二、语法差异)

以下是 Vue 2 和 Vue 3 主要语法差异的逐项对比:


1. 核心架构

  • Vue 2:基于 选项式 APIdatamethodscomputed 等选项组织代码)。

    export default {data() {return { count: 0 };},methods: {increment() { this.count++; }}
    };
    
  • Vue 3:新增 组合式 APIsetup() 函数 + ref/reactive)。

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

2. 响应式系统

  • Vue 2:通过 Object.defineProperty 实现,需手动处理动态属性。

    this.$set(this.obj, 'newKey', 'value'); // 手动触发响应
    
  • Vue 3:基于 Proxy,支持动态属性和数组索引监听,无需手动操作。

    obj.newKey = 'value'; // 自动响应
    

3. 生命周期钩子

  • Vue 2:直接在选项中声明(如 mounted)。

    export default {mounted() { console.log('Mounted'); }
    };
    
  • Vue 3:通过 onMounted 等函数调用,且需在 setup() 中使用。

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

4. 模板语法

  • Vue 2v-model 默认绑定 valueinput 事件。

    <input v-model="text">
    
  • Vue 3:默认绑定 modelValueupdate:modelValue,支持自定义修饰符(如 .trim)。

    <input v-model="text">
    <input v-model:trim="text"> <!-- 自动去除首尾空格 -->
    

5. 组件与 Props

  • Vue 2propsdata 之后声明。

    export default {data() { return { count: 0 }; },props: ['msg']
    };
    
  • Vue 3props 需在 setup() 之前声明,且直接通过参数传递。

    export default {props: ['msg'],setup(props) { /* 直接使用 props.msg */ }
    };
    

6. Fragment 支持

  • Vue 2:组件必须单根节点。

    <!-- 错误:多根节点 -->
    <div>{{ title }}</div>
    <div>{{ content }}</div>
    
  • Vue 3:支持多根节点(Fragment)。

    <div>{{ title }}</div>
    <div>{{ content }}</div>
    

7. Teleport 组件

  • Vue 2:无此功能。
  • Vue 3:新增 <teleport>,将内容渲染到指定 DOM 位置。
    <teleport to="body"><div class="modal">弹窗内容</div>
    </teleport>
    

8. 其他关键变化

  • Vue 2:过滤器(Filters)和 $children

    // 过滤器(已废弃)
    {{ text | capitalize }}
    
  • Vue 3:移除过滤器,推荐使用方法或计算属性;$children 改用 refs

    // 方法替代过滤器
    methods: { capitalize(text) { /* ... */ } }
    

9. 全局 API

  • Vue 2:通过 new Vue() 创建实例。

    new Vue({ el: '#app' });
    
  • Vue 3:改用 createApp()

    createApp(App).mount('#app');
    

总结

  • 核心差异:组合式 API、Proxy 响应式、多根组件、Teleport。
  • 迁移建议:使用官方工具 @vue/compat 逐步迁移,优先适配组合式 API。
  • 学习资源:Vue 3 官方文档。

相关文章:

  • 新一代动态可重构处理器技术,用于加速嵌入式 AI 应用
  • 索尼(sony)摄像机格式化后mp4的恢复方法
  • CAElinux系统详解
  • Retrofit vs Feign: 介绍、对比及示例
  • Spring Boot 跨域问题全解:原理、解决方案与最佳实践
  • Java GUI 开发之旅:Swing 组件与布局管理的实战探索
  • EBS 段值安全性配置
  • 【软件测试】第一章·软件测试概述
  • Spring AI 开发本地deepseek对话快速上手笔记
  • 理解计算机系统_并发编程(5)_基于线程的并发(二):线程api和基于线程的并发服务器
  • 正点原子T80烙铁拆解学习
  • 服务器制造业中,L2、L6、L10等表示什么意思
  • iVX 研发基座:大型系统开发的协作与安全架构实践
  • XA协议和Tcc
  • IP协议的特性
  • Java的进制转换
  • 通义灵码 - HTML智能编码辅助AI工具
  • OrangePi Zero 3学习笔记(Android篇)8 - OpenOCD
  • 1.6 关于static和final的修饰符
  • 全景系统监控利器:Glances 使用介绍与实战指南
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检
  • 人民日报评外卖平台被约谈:摒弃恶性竞争,实现行业健康发展
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 西王食品连亏三年:主业齐“崩”,研发人员多为专科生
  • 听企业聊感受,《外企聊营商》5月13日起推出
  • 母亲节|写给妈妈