vue2和vue3的不同汇总

本文对比了Vue.js2和3在核心架构、性能优化(如虚拟DOM重构和编译器优化)、响应式系统改进、CompositionAPI的引入、生命周期钩子的变化等方面的主要差异,强调了Vue.js3在性能和开发体验上的提升。

原理不同:

Vue.js 2和Vue.js 3之间的原理差异主要集中在其核心架构和一些关键功能上。以下是它们之间的一些主要区别:

  1. 虚拟 DOM 重构

    • Vue.js 3对虚拟 DOM 进行了重构,采用了更高效的算法和数据结构,以提高性能。Vue.js 3的虚拟 DOM 比 Vue.js 2 更轻量级,更快速。
  2. 编译器优化

    • Vue.js 3的编译器进行了改进,生成的代码更加紧凑和高效,这使得 Vue.js 3 的性能比 Vue.js 2 更好。
  3. 响应式系统改进

    • Vue.js 3中的响应式系统得到了改进,使其更具可预测性和稳定性。Vue.js 3中的响应式系统采用了ES6的Proxy代理对象,而不再使用Object.defineProperty,这样可以更好地跟踪属性的变化。

使用ES6的Proxy代理 ,更好的跟踪属性的变化,做到响应式的效果

  1. Composition API

    • Vue.js 3引入了 Composition API,这是一种新的组织组件逻辑的方式。与Vue.js 2中的Options API相比,Composition API更灵活,使得组件逻辑更容易共享和复用。
  2. Tree-shaking支持

    • Vue.js 3更好地支持tree-shaking,这意味着在构建时能更好地剔除未使用的代码,以减少最终打包的体积。
  3. Typescript支持

    • Vue.js 3更加深度地集成了Typescript,使得在使用Typescript时的开发体验更加流畅。
  4. 性能提升

    • 总体而言,Vue.js 3在性能方面比Vue.js 2有所提升,这得益于对核心功能的改进和优化。

这些是Vue.js 2和Vue.js 3之间一些重要的原理上的差异。Vue.js 3通过这些改进和新特性,提供了更好的性能、更好的开发体验和更好的可维护性。

 组件不同:

Options API(选项式 API)是 Vue.js 2 中用来编写组件的一种方式。在 Options API 中,组件的选项被定义为一个对象,其中包含了 data、methods、computed、watch 等属性,用来组织组件的数据和方法。Options API 的特点是将组件的不同功能按照选项的方式进行组织,使得组件的结构相对清晰,适用于较简单的组件场景。Options API 在 Vue.js 2 中被广泛使用,但在处理较复杂的组件时可能会导致代码冗长和难以维护。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="decrement">Decrement</button>
    <p>Double Count: {{ doubleCount }}</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    },
    decrement() {
      this.count--;
    }
  },
  computed: {
    doubleCount() {
      return this.count * 2;
    }
  }
};
</script>

Composition API(组合式 API)是 Vue.js 3 中引入的一种新的组件编写方式。它允许开发者通过函数的方式组织组件逻辑,提供了更灵活、可组合和可重用的方式来编写 Vue 组件。Composition API 的核心思想是将逻辑按功能组织,而不是按照选项的方式进行组织,这使得在处理复杂组件时更加清晰和简洁。Composition API 的引入使得 Vue 组件的编写更加灵活和可维护。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="decrement">Decrement</button>
    <p>Double Count: {{ doubleCount }}</p>
  </div>
</template>
 
<script>
import { ref, computed } from 'vue';
 
export default {
  setup() {
    const count = ref(0);
 
    function increment() {
      count.value++;
    }
 
    function decrement() {
      count.value--;
    }
 
    const doubleCount = computed(() => count.value * 2);
 
    return {
      count,
      increment,
      decrement,
      doubleCount
    };
  }
};
</script>

生命周期不同:

Vue 2 和 Vue 3 中的生命周期钩子基本相同,但在 Vue 3 中有一些生命周期钩子被重命名或者合并了。以下是 Vue 2 和 Vue 3 中常用的生命周期钩子以及它们的写法区别:

Vue 2 生命周期钩子

  1. beforeCreate:实例刚被创建,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

  2. created:实例已经创建完成,此时已经完成了数据观测和初始化,但尚未挂载到 DOM 上。

  3. beforeMount:在挂载开始之前被调用,相关的 render 函数首次被调用。

  4. mounted:实例已经挂载到 DOM 上后调用,此时组件已经在 DOM 中,可以进行 DOM 操作。

  5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

  6. updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁后调用。

  7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。

  8. destroyed:实例销毁之后调用。在这一步,所有的事件监听器和子实例已经被移除。

Vue 3 生命周期钩子

  1. beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

  2. created:实例已经创建完成,此时已经完成了数据观测和初始化,但尚未挂载到 DOM 上。

  3. beforeMount:在挂载开始之前被调用,相关的 render 函数首次被调用。

  4. onMounted:在挂载完成后调用,对应于 Vue 2 中的 mounted 钩子。

  5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

  6. onUpdated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁后调用。

  7. beforeUnmount:在卸载之前调用。

  8. onUnmounted:在卸载之后调用,对应于 Vue 2 中的 destroyed 钩子。

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值