当前位置: 首页 > 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 官方文档。
http://www.dtcms.com/a/189042.html

相关文章:

  • 新一代动态可重构处理器技术,用于加速嵌入式 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 使用介绍与实战指南
  • 采用AI神经网络降噪算法的语言降噪消回音处理芯片NR2049-P
  • 【Linux】进程通信 管道
  • Redis——线程模型·
  • STB仿真和放大器开环AC仿真有什么区别
  • 解锁城市排水系统设计与二次开发的钥匙-SWMM复杂城市排水系统模型及排水防涝、海绵城市设计等工程实践应用
  • 二分查找算法的思路
  • 丝杆升降机限位开关信号解析与应用实践:从原理到代码实现
  • 后量子密码通信协议测试指南
  • Lighthouse Core Web Vitals 指标详解与优化指南
  • 深入浅出之STL源码分析8_三个指针