当前位置: 首页 > 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.xdnf.cn/news/427681.html

相关文章:

  • Excel的详细使用指南
  • Mac修改hosts文件方法
  • Linux文件编程——标准库函数fopen、fread、fwrite等函数
  • Confusion2(Python反序列化+JWT)
  • MySQL——八、SQL优化
  • 【deekseek】P2P通信路由过程
  • 测试报告--博客系统
  • --openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式
  • 栈与乘积 / 栈
  • rk3576--- HDMI CEC唤醒
  • TCP核心机制
  • 机器学习第八讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列
  • 已情感分析入门学习大模型-初级篇
  • MCP-RAG 服务器:完整设置和使用指南
  • Java 集合与 MyBatis 动态 SQL 实战教程
  • 普通项目与 FreeRTOS 项目的异同
  • 【NLP 72、Prompt、Agent、MCP、function calling】
  • 全景系统监控利器:Glances 使用介绍与实战指南
  • 【数据结构】双向链表
  • 开发与AI融合的Windsurf编辑器
  • 屏幕与触摸调试
  • Retrofit vs Feign: 介绍、对比及示例
  • 关于 javax.validation.constraints的详细说明
  • Visual Studio 项目 .gitignore 文件指南
  • 如何界定合法收集数据?
  • 【C++】【设计模式】生产者-消费者模型
  • EDR与XDR如何选择适合您的网络安全解决方案
  • 自我奖励语言模型:突破人类反馈瓶颈
  • WebGIS开发面试题:前端篇(六)
  • 【递归、搜索与回溯】专题一:递归(二)