Vue3和Vue2的差异总结对比(含代码案例)

目录

Composition API(组合式 API)

setup() 函数

ref 和 reactive

Teleport 组件

Fragment 组件

全局 API 改变

V-model 的改进

编译器优化

响应式系统改进

更好的类型推导和支持

更好的性能


Composition API(组合式 API)

  • Vue3引入了Composition API,它是Vue3中最引人注目的变化之一,是一种新的组件编写方式,它允许开发者使用函数式API来组织和重用组件逻辑,而不仅仅是依赖于选项对象 API。这使得组件更易于理解和维护。
  • 在Vue2中,我们使用Options API来定义组件,而在Vue3中,我们可以使用setup函数,并结合各种函数和响应式引用进行逻辑编写。

 在Vue3中,使用Composition API可以更好地组织和重用组件逻辑。通过setup()函数,在其中编写逻辑代码。下面是一个示例:

Vue3:

<template><div>{{ count }}</div>
</template><script>
import { ref } from 'vue';export default {setup() {const count = ref(0);// 自定义函数function increment() {count.value++;}return {count,increment};}
};
</script>

Vue2:

<template><div>{{ count }}</div>
</template><script>
export default {data() {return {count: 0};},methods: {increment() {this.count++;}}
};
</script>

setup() 函数

在Vue3中,组件的选项中添加了一个名为setup()的新函数。setup()函数用于替代Vue2中的created()mounted()等钩子函数。setup()函数在组件实例被创建之前执行,并且作为一个独立的生命周期阶段。

setup()函数,可以替代Vue2中的生命周期钩子函数。下面是一个示例:

Vue3:

<template><button @click="increment">{{ count }}</button>
</template><script>
import { ref, onMounted } from 'vue';export default {setup() {const count = ref(0);// 在组件挂载后执行onMounted(() => {console.log('Component mounted');});// 自定义函数function increment() {count.value++;}return {count,increment};}
};
</script>

Vue2:

<template><button @click="increment">{{ count }}</button>
</template><script>
export default {data() {return {count: 0};},mounted() {console.log('Component mounted');},methods: {increment() {this.count++;}}
};
</script>

ref 和 reactive

在Vue3中,refreactive是用于创建响应式数据的新函数。ref用于创建一个基本类型的响应式数据,而reactive则用于创建一个响应式对象。在Vue2中,可以直接在data选项中定义响应式数据。

refreactive函数用于创建响应式数据,示例:

Vue3:

<template><div>{{ count.value }}</div>
</template><script>
import { ref, reactive } from 'vue';export default {setup() {const count = ref(0);const person = reactive({name: 'Alice',age: 25});// 修改数据function increment() {count.value++;person.age++;}return {count,person,increment};}
};
</script>

Vue2:

<template><div>{{ count }}</div>
</template><script>
export default {data() {return {count: 0,person: {name: 'Alice',age: 25}};},methods: {increment() {this.count++;this.person.age++;}}
};
</script>

Teleport 组件

Vue3引入了Teleport组件,它可以在DOM树中的任何位置渲染组件内容。这对于创建弹出窗口、对话框等动态组件非常有用。

下面是一个示例:

Vue3:

<template><div><button @click="showModal = true">Show Modal</button><teleport to="body"><modal v-if="showModal" @close="showModal = false"><!-- modal content --></modal></teleport></div>
</template><script>
import { ref } from 'vue';export default {components: {Modal: {...}},setup() {const showModal = ref(false);return {showModal};}
};
</script>

Vue2:

<template><div><button @click="showModal = true">Show Modal</button><modal v-if="showModal" @close="showModal = false"><!-- modal content --></modal></div>
</template><script>
export default {components: {Modal: {...}},data() {return {showModal: false};}
};
</script>

Fragment 组件

Vue3中可以使用<template>标签外的根级别元素来包裹多个组件,而不需要显式地添加一个无意义的父级元素。

Vue3:

<template><div><h1>Header</h1><p>Some content...</p><button>Button</button></div>
</template>

Vue2:

<template><div><div><h1>Header</h1><p>Some content...</p></div><button>Button</button></div>
</template>

全局 API 改变

在Vue3中,全局API的使用方式有所改变。一些全局API的调用方式发生了变化

Vue3

import { createApp } from 'vue';const app = createApp({...});app.directive('my-directive', {...});
app.config.globalProperties.$filters = {...};app.mount('#app');

Vue2

import Vue from 'vue';Vue.directive('my-directive', {...});
Vue.filter('my-filter', {...});new Vue({el: '#app',...
});

V-model 的改进

在Vue3中,可以通过v-model指令绑定自定义组件的值,对于双向绑定提供了更大的灵活性。

Vue3

<template><custom-input v-model="message" />
</template><script>
import { ref } from 'vue';export default {setup() {const message = ref('');return {message};}
};
</script>

Vue2

<template><custom-input :value="message" @input="message = $event" />
</template><script>
export default {data() {return {message: ''};}
};
</script>

编译器优化

Vue3的编译器经过了改进,生成了更高效的渲染函数,提供了更好的性能。新的编译器还支持静态提升和源码映射等功能,使得调试更加方便。

响应式系统改进

  • Vue3采用了Proxy作为其响应式系统的核心,相比于Vue2的Object.defineProperty,Proxy具有更好的性能和更强大的功能。
  • Vue3中的响应式系统还引入了Reactivity API,使得可以更灵活地处理响应式数据。

更好的类型推导和支持

  • Vue3通过TypeScript提供了更好的类型支持,可以提供更强大的IDE提示和类型检查。
  • Vue3中的组件选项类型也进行了改进,更加准确。

更好的性能

  • Vue3通过更新的编译器和渲染机制,提供了更好的性能表现。
  • Vue3中使用了静态树提升和更高效的虚拟DOM算法,优化了组件的渲染过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwipeDelMenuLayout失效:Could not find SwipeDelMenuLayout-V1.3.0.jar

一、问题描述 最近在工作上的项目中接触到SwipeDelMenuLayout这个第三方Android开发库&#xff0c;然后我就根据网上的教程进行配置。这里先说一下我的开发环境&#xff1a;Android Studio版本是android-studio-2020.3.1.24-windows&#xff0c;gradle版本是7.0.2。 首先是在se…

RWEQ模型——土壤风蚀模拟

详情点击链接&#xff1a;基于“RWEQ”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写 前沿 土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的…

【Docker】Docker应用部署之Docker容器安装Tomcat

目录 一、搜索镜像 二、拉取镜像 三、创建容器 四、测试使用 一、搜索镜像 docker search tomcat 二、拉取镜像 docker pull tomcat:版本 三、创建容器 首先在宿主机创建数据卷的目录 mkdir /root/tomcat # 创建目录 cd /root/tomcat # 进入目录 docker run -id -…

前端框架学习-Vue(二)

最近在学习Vue框架&#xff0c;Vue中的内容很多。相当于把之前后端的MVC&#xff0c;V层转移到前端来编写和部署。下面是学习Vue时的大纲。 Vue生命周期是Vue应用的生命周期Vue脚手架&#xff0c;即vue-cli&#xff0c;使用node.js 来创建和启动vue项目Vue组件知识&#xff0c;…

RS485/RS232自由转ETHERNET/IP网关profinet和ethernet区别

你是否曾经遇到过这样的问题&#xff1a;如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢&#xff1f;捷米的JM-EIP-RS485/232通讯网关&#xff0c;自主研发的ETHERNET/IP从站功能&#xff0c;完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线连接起…

Zynq-Linux移植学习笔记之62- PL挂载复旦微flash

1、背景介绍 现在为了全国产化需要&#xff0c;之前所有的进口flash全部要换成国产flash 2、复旦微flash型号 其中EFM25QU256和EFM25QL256对标winbond的w25q256 nor flash 3、FPGA设置 复旦微flash只支持单线模式&#xff0c;当使用PL侧的IP核访问时&#xff0c;需要设置模式…

【系统架构】分布式系统架构设计

1 分布式系统是什么 分布式系统是指由多个计算机节点组成的一个系统&#xff0c;这些节点通过网络互相连接&#xff0c;并协同工作完成某个任务。 与单个计算机相比&#xff0c;分布式系统具有更高的可扩展性、可靠性和性能等优势&#xff0c;因此广泛应用于大规模数据处理、高…

IDEA代码自动格式化工具

1.自动import 在IDEA中&#xff0c;打开 IDEA 的设置&#xff0c;找到 Editor -> General -> Auto Import。勾选上 Add unambiguous imports on the flyOptimize imports on the fly (for current project) 2.gitee 提交格式化 设置方法如下: 1.打开设置 2.找到版本…

KMP算法总结

KMP算法总结 BF算法引导BF算法步骤&#xff08;图片演示&#xff09;代码演示 KMP算法推next数组代码演示 BF算法引导 BF算法是一个暴力的字符串匹配算法&#xff0c;时间复杂度是o&#xff08;m*n&#xff09; 假设主串和子串分别为 我们想要找到子串在主串的位置 BF算法核…

netcat和netstat使用

Linux是一款受欢迎的开源操作系统&#xff0c;在Linux系统中要安装用于终端连接的nc&#xff08;netcat&#xff09;工具&#xff0c;可以帮助我们快速管理网络服务&#xff0c;在此文中&#xff0c;我们将介绍如何在Linux系统下安装nc工具的详细步骤。 一.安装nc工具 1.首先…

Spring Boot集成Swagger3.0,Knife4j导出文档

文章目录 Spring Boot集成Swagger3.0,Knife4j导出文档效果展示如何使用简要说明添加依赖添加配置类测试接口token配置位置 官网 说明情况 demo Spring Boot集成Swagger3.0,Knife4j导出文档 效果展示 如何使用 简要说明 Knife4j的前身是swagger-bootstrap-ui,前身swagger-boo…

Github-Copilot初体验-Pycharm插件的安装与测试

引言&#xff1a; 80%代码秒生成&#xff01;AI神器Copilot大升级 最近copilot又在众多独角兽公司的合力下&#xff0c;取得了重大升级。GitHub Copilot发布还不到两年&#xff0c; 就已经为100多万的开发者&#xff0c;编写了46%的代码&#xff0c;并提高了55%的编码速度。 …

springboot整合myabtis+mysql

一、pom.xml <!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--springboot与JDBC整合包--><dependency><groupId>org.springframework.b…

微信小程序实现日历功能、日历转换插件、calendar

文章目录 演示htmlJavaScript 演示 效果图 微信小程序实现交互 html <view wx:if"{{calendarArr.length}}"><view class"height_786 df_fdc_aic"><view class"grid_c7_104"><view class"font_weight_800 text_align…

Redis 数据库高可用

Redis 数据库的高可用 一.Redis 数据库的持久化 1.Redis 高可用概念 &#xff08;1&#xff09;在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 …

【Golang 接口自动化02】使用标准库net/http发送Post请求

目录 写在前面 发送Post请求 示例代码 源码分析 Post请求参数解析 响应数据解析 验证 发送Json/XMl Json请求示例代码 xml请求示例代码 总结 资料获取方法 写在前面 上一篇我们介绍了使用 net/http 发送get请求&#xff0c;因为考虑到篇幅问题&#xff0c;把Post单…

Spring Boot 缓存 Cache 入门

Spring Boot 缓存 Cache 入门 1.概述 在系统访问量越来越大之后&#xff0c;往往最先出现瓶颈的往往是数据库。而为了减少数据库的压力&#xff0c;我们可以选择让产品砍掉消耗数据库性能的需求。 当然也可以引入缓存,在引入缓存之后&#xff0c;我们的读操作的代码&#xff…

介绍壹牛NFT数字艺术藏品数藏源码

这个版本新增了不少功能&#xff0c;也修复了一些地方。 1.平台新增用户找回密码功能 2.平台新增短信注册&#xff08;实名制功能&#xff09; 3.平台新增主图后台添加功能 4.平台修复相关问题&#xff0c;系统高效运行 5、H5端与APP端在新UI完美适配 6、加入宝盒功能&…

Java方法的使用(重点:形参和实参的关系、方法重载、递归)

目录 一、Java方法 * 有返回类型&#xff0c;在方法体里就一定要返回相应类型的数据。没有返回类型&#xff08;void&#xff09;&#xff0c;就不要返回&#xff01;&#xff01; * 方法没有声明一说。与C语言不同&#xff08;C语言是自顶向下读取代码&#xff09;&#…

基于SpringBoot+Vue的车辆充电桩管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…