首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈vue2与vue3的区别

浅谈vue2与vue3的区别

原创
作者头像
云萌工作室
发布于 2024-12-13 10:32:07
发布于 2024-12-13 10:32:07
4180
举报
文章被收录于专栏:编程开发基础编程开发基础

vue2与vue3的区别

响应式系统(Reactivity System)

Vue2

Vue 2 :使用 Object.defineProperty 来实现数据的响应式。当你访问一个对象的属性时,它会触发 getter;修改属性时,会触发 setter。但是,Vue 2 的响应式系统在某些复杂情况下,比如添加新属性时,并不完全响应。

代码语言:js
AI代码解释
复制
// Vue 2 响应式系统的示例
new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue 2'
  
  mounted() {
    // 使用 Vue.set 来新增响应式属性
    this.$set(this.$data, 'newMessage', 'New Hello');
  }
});

Vue3

Vue3:使用 Proxy,允许对整个对象进行代理,而不是逐个属性定义 ProxysetterProxy 可以拦截对象的各种操作(如属性读取、修改、添加、删除等),它能够自动跟踪对象的所有操作(包括对不存在的属性进行访问和修改)。因此 Vue 3 可以更好地处理动态添加的属性,性能也更好。

代码语言:js
AI代码解释
复制
javascript
// Vue 3 响应式系统的示例
import { reactive } from 'vue';

const state = reactive({
  message: 'Hello Vue 3'
});

state.newMessage = 'New Hello';  // 不需要使用 Vue.set

API的选择

Vue2

Vue 2: 主要使用 Options API组件的逻辑组件通过使用特定的选项对象(如data、methods、computed、watch 等)来组织组件逻辑,每个选项负责一种特定的功能。对于简单组件,易于理解和使用;但组件变得复杂时,相关逻辑分散在不同的选项中,难以维护。

代码语言:js
AI代码解释
复制
// Vue 2 使用 Options API
new Vue({
  el: '#app',
  data: {
    count: 0
  },
  methods: {
    increment() {
      this.count++;
    }
  }
});

vue3

Vue 3 :引入了Composition API,通过 setup() 函数将组件逻辑组织在一起,将一个功能的所有代码集中起来处理,使得代码复用和可维护性提高。

代码语言:js
AI代码解释
复制
// Vue 3 使用 Composition API
import { ref } from 'vue';

export default {
  setup() {
    const count = ref(0);
    const increment = () => {
      count.value++;
    };

    return { count, increment };
  }
};

组件模版和语法扩展

Vue2

Vue 2: 要求每个组件中必须只有一个根标签,否则会出错

. v-model 语法的变化

Vue 2 :v-model 只能绑定 value 属性并触发 input 事件。

代码语言:html
AI代码解释
复制
<!-- Vue 2 使用 v-model -->
<template>
  <input v-model="message" />
</template>

<script>
new Vue({
  el: '#app',
  data: {
    message: ''
  }
});
</script>

Vue3

Vue 3 :支持 Fragment,允许组件返回多个根节点。

v-model 语法的变化

Vue 3 :v-model 变得更加灵活,支持自定义属性和事件,可以通过 modelValue@update:modelValue 来代替 valueinput

代码语言:html
AI代码解释
复制
<!-- Vue 3 使用 v-model -->
<template>
  <input :value="modelValue" @input="$emit('update:modelValue', $event)" />
</template>

<script>
export default {
  props: {
    modelValue: String
  }
};
</script>

生命周期钩子函数

Vue2

Vue 2: 采用传统的生命周期钩子,比如 createdmountedupdateddestroyed 等。

代码语言:js
AI代码解释
复制
// Vue 2 生命周期钩子
new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  },
  created() {
    console.log('Component created');
  },
  mounted() {
    console.log('Component mounted');
  }
});

Vue3

Vue 3 :生命周期钩子变成了函数,可以在 setup() 中直接使用,如 onMountedonUpdatedonUnmounted 等。

代码语言:js
AI代码解释
复制
// Vue 3 生命周期钩子
import { onMounted, ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello Vue 3');

    onMounted(() => {
      console.log('Component mounted');
    });

    return { message };
  }
};

性能优化和模块化改进

Vue2

状态管理

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

代码语言:html
AI代码解释
复制
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;
        }
    }
});

TypeScrip

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

代码语言:typescript
AI代码解释
复制
// Vue 2 TypeScript 示例
import Vue from 'vue';

export default Vue.extend({
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    }
  }
});

Teleport

Vue 2 :没有内置的 Teleport 功能,我们需要手动处理模态框等组件的 DOM 位置。

Suspense

Vue 2:Vue 2 没有内置的 Suspense 支持,处理异步组件时需要手动处理 loading 状态。

代码语言:js
AI代码解释
复制
// Vue 2 异步组件的实现
Vue.component('async-component', () => ({
  component: import('./AsyncComponent'),
  loading: LoadingComponent,
  error: ErrorComponent,
}));

Vue3

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

代码语言:js
AI代码解释
复制
import { defineStore } from 'pinia';
 
export const useMainStore = defineStore('main', {
    state: () => ({
        count: 0
    }),
    actions: {
        increment() {
            this.count++;
        }
    },
    getters: {
        doubleCount: (state) => state.count * 2
    }
});

Vue 3:Vue 3 在设计时就全面考虑了 TypeScript 的支持,TypeScript 集成更加顺畅。

代码语言:typescript
AI代码解释
复制
// Vue 3 TypeScript 示例
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const count = ref(0);
    const increment = () => {
      count.value++;
    };

    return { count, increment };
  }
});

Teleport

Vue 3: 引入了 Teleport,可以将组件内容渲染到 DOM 树的其他部分,常用于模态框、通知等场景。

代码语言:html
AI代码解释
复制
<!-- Vue 3 使用 Teleport -->
<template>
  <teleport to="body">
    <div class="modal">This is a modal</div>
  </teleport>
</template>

Suspense

Vue 3 提供了 Suspense 组件,使得处理异步组件变得更加简单,自动展示加载状态。

代码语言:js
AI代码解释
复制
<!-- Vue 3 使用 Suspense -->
<template>
  <Suspense>
    <template #default>
      <AsyncComponent />
    </template>
    <template #fallback>
      <div>Loading...</div>
    </template>
  </Suspense>
</template>

<script>
import { defineAsyncComponent } from 'vue';

export default {
  components: {
    AsyncComponent: defineAsyncComponent(() => import('./AsyncComponent'))
  }
};
</script>

总结

Vue 3 相比 Vue 2 引入了许多重要的新特性和性能优化,在多个方面进行了显著的改进,增强了性能、灵活性和可维护性,特别是在响应式系统、API 设计和 TypeScript 支持等方面。这些改进使得 Vue 3 更加灵活、强大,适合现代 Web 应用的需求。这些特性使我们在开发大型应用时能够编写更简洁、易维护且高效的代码。


本文由“云萌工作室-前沿技术基础”专栏提供,关注更多编程技巧与知识。

@Author: L_NQ

@Date: 2024/12/13

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Redis
为了方便和后面不修改原生的配置文件,我们会复制一个配置文件到 /user/local/bin 下,
化羽羽
2022/10/28
6770
Redis(9)——史上最强【集群】入门实践教程
到 目前 为止,我们所学习的 Redis 都是 单机版 的,这也就意味着一旦我们所依赖的 Redis 服务宕机了,我们的主流程也会受到一定的影响,这当然是我们不能够接受的。
我没有三颗心脏
2020/03/20
6490
Redis(9)——史上最强【集群】入门实践教程
Redis笔记
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。是NoSQL技术之一,也被称为结构化数据库!
技术交流
2022/11/18
4060
Redis笔记
redis学习之redis分布式(三)
先来简单了解下redis中提供的集群策略, 虽然redis有持久化功能能够保障redis服务器宕机也能恢复并且只有少量的数据损失,但是由于所有数据在一台服务器上,如果这台服务器出现硬盘故障,那就算是有备份也仍然不可避免数据丢失的问题。 在实际生产环境中,我们不可能只使用一台redis服务器作为我们的缓存服务器,必须要多台实现集群,避免出现单点故障;
周杰伦本人
2022/10/25
3500
redis学习之redis分布式(三)
Redis 【常识与进阶】
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
IT茂茂
2020/04/02
5500
Redis 【常识与进阶】
Redis学习笔记
    (*)前身:Memcached     (*)区别:支持持久化,RDB、AOF                 支持丰富的数据类型
曼路
2018/10/18
6110
【9k字+】第二篇:进阶:掌握 Redis 的一些进阶操作(Linux环境)
能够合理的查看,以及理解修改配置文件,能帮助我们更好的使用 Redis,下面按照 Redis 配置文件的顺序依次往下讲
BWH_Steven
2021/02/24
3670
【9k字+】第二篇:进阶:掌握 Redis 的一些进阶操作(Linux环境)
一文搞懂 Redis 的三种集群方案
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠性要求较高,则需要引入Redis的集群方案。虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些必要(比如面试), 本文就一起来学习一下Redis的几种集群方案。
iMike
2020/11/24
11.3K0
一文搞懂 Redis 的三种集群方案
Redis详解
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave(主从)同步。 免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!
JokerDJ
2023/11/27
4570
Redis详解
Redis入坟(六)分布式集群,概念、原理、实操
可用性、数据安全、性能都可以通过搭建多个 Reids 服务实现。其中有一个是主节点(master),可以有多个从节点(slave)。主从之间通过数据同步,存储完全相同的数据。如果主节点发生故障,则把某个从节点改成主节点,访问新的主节点。
源码之路
2020/09/04
8660
Redis入坟(六)分布式集群,概念、原理、实操
Redis源码阅读(五)主从复制与哨兵机制
Redis 单节点存在单点故障问题,为了解决单点问题,一般都需要对 Redis 配置从节点,然后使用哨兵来监听主节点的存活状态,如果主节点挂掉,从节点能继续提供缓存功能。
星沉
2022/01/28
6870
redis一主一从哨兵模式_kafka主从复制
Redis是内存数据库,如果不见内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能
全栈程序员站长
2022/09/21
6310
redis一主一从哨兵模式_kafka主从复制
Redis进阶
绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。
xiaozhangStu
2023/05/04
3290
Redis数据结构存储系统:第一章:安装配置
NoSQL是Not only SQL的缩写,大意为“不只是SQL”,说明这项技术是传统关系型数据库的补充而非替代。在整个NoSQL技术栈中MemCache、Redis、MongoDB被称为NoSQL三剑客。那么时代为什么需要NoSQL数据库呢?我们来做个对比:
Java廖志伟
2022/09/28
3420
Redis数据结构存储系统:第一章:安装配置
day107&day109部分&day111部分-Linux安装MariaDB&Redis
1.MariaDB 1.1简介 # mariadb其实就是mysql # mysql已经被oracle收购,它即将闭源,马上要开始收费了 # 因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb 1.2安装 yum install mariadb-server 1.3初始化 MariaDB mysql_secure_installation # 直接输入 y、n 一步一步走,设置root密码,删除匿名用户等等操作 1.4配置可远程登录MariaDB # 主机 my
少年包青菜
2020/04/09
6750
Redis详解(八)------ 主从复制
  前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大的问题,通常会采取的一种方式是主从架构Master/Slave,Master 以写为主,Slave 以读为主,Master 主节点更新后根据配置,自动同步到从机Slave 节点。
IT可乐
2018/07/31
5920
Redis详解(八)------ 主从复制
redis研究
最近看了本书《Redis中文文档》,这本书写得挺好,讲了Redis的方方面面,在这里记录一下以备忘。 相关概念 键空间通知 这个用得比较少,暂时不记录了。 事务 大多数NOSQL数据库并不支持事务,可Redis提供有限的事务支持。之所以说是有限的事务支持,是因为客户端成功在开启事务之后执行 EXEC,在执行EXEC的过程中如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。这时Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会
jeremyxu
2018/05/10
8720
0. Redis 基础
如果对 Redis 还不了解的同学可以先看一下这篇 Redis 基础文章 ,这里面介绍了 Redis 是什么,以及怎么用
说故事的五公子
2022/11/07
6690
0. Redis 基础
超详细图文之Redis(下篇)
我们发现,在事务中每次执行一条指令,就会返回QUEUED,表明指令已经存入了这个事务的执行队列中了。但是需要注意的一点是,只是放入了事务队列,但并没有去执行。那什么时候会执行呢?那就来看一下下个指令EXEC。
爪哇缪斯
2023/05/10
2550
超详细图文之Redis(下篇)
Redis 数据库
1.1 Redis简介 1.1.1 介绍 Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对(key-value)存储数据库。从2015年6月开始,Redis的开发由R
惨绿少年
2018/03/30
3.6K0
相关推荐
Redis
更多 >
目录
  • vue2与vue3的区别
    • 响应式系统(Reactivity System)
      • Vue2
      • Vue3
    • API的选择
      • Vue2
      • vue3
    • 组件模版和语法扩展
      • Vue2
      • Vue3
    • 生命周期钩子函数
      • Vue2
      • Vue3
    • 性能优化和模块化改进
      • Vue2
      • Vue3
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档