Vue2和Vue3的区别

26,147次阅读
没有评论

共计 2360 个字符,预计需要花费 6 分钟才能阅读完成。

一、背景:什么是 Vue?

Vue 是一个渐进式 JavaScript 框架,它提供了一套声明式、组件化的编程模型

二、Vue2 和 Vue3 的区别

1、vue3 支持碎片化

vue2: 中必须只有一个根标签

vue3:Fragments 使组件可以有多个根标签,会默认把这些标签包裹在一个虚拟标签中,减少内存占用

2、组合式 API 和选项式 API

vue 结构 特点
组合式 API vue3 将一个功能的所有代码集中起来处理 对复杂组件更易于维护和理解
选项式 API vue2 使用特定的选项对象(如 datamethodscomputedwatch 等)来组织组件逻辑,每个选项负责一种特定的功能 对于简单组件,易于理解和使用;但组件变得复杂时,相关逻辑分散在不同的选项中,难以维护

3、生命周期

vue2 vue3
beforeCreate/created setup
beforeMount onBeforeMount
mounted onMounted
beforeUpdate onBeforeUpdate
updated onUpdated
beforeUnmount onBeforeUnmount
unmounted onUnmounted

4、TypeScript 支持

Vue 2:虽然可以使用 TypeScript,但支持不够完善,类型推断和类型检查较弱。

Vue 3:从设计之初就考虑了 TypeScript,提供了更好的类型推断,允许更安全的开发体验。

5、响应式原理

特征 Vue 2 Vue 3
响应式实现

使用 Object.defineProperty 方法来定义对象的 getter 和 setter,以实现数据的响应式;

当数据被访问时,getter 被调用,Vue 会记录依赖(即哪些组件使用了这个数据);

当数据被修改时,setter 被调用,Vue 会通知所有依赖该数据的组件进行更新

使用 Proxy, 允许对整个对象进行代理,而不是逐个属性定义 getter 和 setter。

Proxy 可以拦截对象的各种操作(如属性读取、修改、添加、删除等),从而实现更全面的响应式。

新属性支持 不支持,需要使用 Vue.set 支持,直接添加新属性自动响应
数组索引支持 不支持,需使用 splice 或 Vue.set 支持,数组操作均可触发更新
性能 性能开销较大,尤其在大规模应用中 性能更佳,响应式开销更低
依赖追踪 依赖追踪机制较简单 更复杂的依赖追踪机制
复杂性 简单但功能有限 更复杂,但更灵活和强大

6、状态管理

vue2:使用 Vuex,通过 stategettersmutations 和 actions 组织,采用单一的全局状态树,所有状态集中在一个地方,便于管理和调试

const store = new Vuex.Store({
    state: {count: 0},
    mutations: {  必须通过这里,确保状态的可追踪性
        increment(state) {state.count++;}
    },
    actions: {incrementAsync({ commit}) {setTimeout(() => {commit('increment');
            }, 1000);
        }
    },
    getters: {doubleCount(state) {return state.count * 2;}
    }
});

vue3:使用 Pinia, 允许多个 store 模块,支持模块化的状态管理,更加灵活

import {defineStore} from 'pinia';

export const useMainStore = defineStore('main', {state: () => ({count: 0}),
    actions: {increment() {this.count++;}
    },
    getters: {doubleCount: (state) => state.count * 2
    }
});

7、创建 Vue 实例

vue2:创建 Vue 实例是通过 new Vue() 构造函数来实现的,通常是在 main.js 文件中直接创建应用实例,并将路由和状态管理作为选项传入

Vue2 和 Vue3 的区别

vue3:使用 createApp 函数来创建应用实例,这使得创建过程更加清晰。路由和状态管理通过 use 方法进行插件注册

Vue2 和 Vue3 的区别

8、路由管理

vue2:路由通过 VueRouter 插件进行管理,并在 Vue 实例中进行注册

Vue2 和 Vue3 的区别

vue3:仍然使用 Vue Router 进行路由管理,但通过 createRouter 函数来创建路由实例,API 更加现代化

Vue2 和 Vue3 的区别

9、vue3 中的 Teleport

定义:eleport 是一个新的内置组件,允许将其子组件渲染到 DOM 的其他位置,而不是其父组件的结构中。这个功能在处理模态框、提示框、上下文菜单等场景中非常有用

用法:





10、性能优化

vue2:性能较好,但在大型应用中,当数据变化频繁时可能出现性能瓶颈

vue3:引入了虚拟 DOM 的优化,减少了不必要的渲染;使用编译时优化,生成更小的代码,提高了运行时性能

三、总结

Vue 3 在多个方面进行了显著的改进,增强了性能、灵活性和可维护性,特别是在响应式系统、API 设计和 TypeScript 支持等方面。这些改进使得 Vue 3 更加灵活、强大,适合现代 Web 应用的需求。

原文地址: Vue2 和 Vue3 的区别

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-29发表,共计2360字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)