Vue.js 组件开发深入解析:Vue 2 vs Vue 3
Vue.js 是一个渐进式框架,旨在通过声明式渲染和组件化开发来提高开发效率和可维护性。组件是 Vue 应用的基本组成部分,几乎所有的功能都可以通过组件来实现。随着 Vue 3 的发布,Vue.js 引入了许多新的特性,使得组件的开发变得更加灵活和高效。本文将深入探讨 Vue 2 和 Vue 3 之间在组件开发上的主要差异,帮助你更好地理解如何在这两个版本中开发高质量的组件。
1. Vue 组件的基本结构
首先,我们来回顾一下 Vue.js 组件的基本结构。每个 Vue 组件通常包括三个部分:模板 (template
)、脚本 (script
) 和样式 (style
)。这是组件的基础组成,无论是在 Vue 2 还是 Vue 3 中都基本相同。
示例:简单的 Vue 组件
<template><div><h1>{{ title }}</h1><button @click="changeTitle">点击我</button></div>
</template><script>
export default {data() {return {title: 'Hello, Vue.js!'};},methods: {changeTitle() {this.title = '标题已改变';}}
};
</script><style scoped>
h1 {color: blue;
}
</style>
这个组件展示了一个简单的文本和按钮。点击按钮时,会改变 title
的值。
2. Vue 2 组件开发
2.1 定义组件
在 Vue 2 中,我们通常通过 Vue.component()
注册全局组件,或者在父组件中通过 components
选项注册局部组件。
// Vue 2 全局组件注册
Vue.component('custom-button', {template: '<button>点击我</button>'
});
<!-- Vue 2 局部组件注册 -->
<template><div><custom-button></custom-button></div>
</template><script>
import CustomButton from './CustomButton.vue';export default {components: {CustomButton}
};
</script>
2.2 组件数据和方法
在 Vue 2 中,组件的数据和方法通过 data
和 methods
选项定义,data
需要返回一个对象,方法则可以通过 methods
来定义。
<script>
export default {data() {return {title: 'Hello, Vue 2!'};},methods: {changeTitle() {this.title = '标题已改变';}}
};
</script>
2.3 生命周期钩子
Vue 2 使用选项式 API,生命周期钩子如 created
、mounted
、beforeDestroy
等被直接在组件选项中定义。
export default {data() {return {title: 'Hello, Vue.js!'};},created() {console.log('组件已创建');},mounted() {console.log('组件已挂载');}
};
3. Vue 3 组件开发
Vue 3 引入了 Composition API,它通过将逻辑组织成函数而不是对象,极大地提高了组件的灵活性和复用性。此外,Vue 3 在性能、类型支持等方面也有显著改进。
3.1 Composition API
Vue 3 的 Composition API 允许你在同一个组件内按逻辑单元组织代码,而不必将不同的代码分散到 data
、methods
、computed
中。这使得组件逻辑更具可读性和复用性。
<!-- Vue 3 简单组件 -->
<template><div><h1>{{ title }}</h1><button @click="changeTitle">点击我</button></div>
</template><script setup>
import { ref } from 'vue';const title = ref('Hello, Vue 3!');
const changeTitle = () => {title.value = '标题已改变';
};
</script>
在这个 Vue 3 示例中,我们使用了 ref
来创建响应式数据,并且通过 setup
语法糖来组织组件逻辑。相比于 Vue 2 的 data
和 methods
,Composition API 让逻辑变得更加直观。
3.2 更灵活的生命周期钩子
Vue 3 提供了与 Vue 2 类似的生命周期钩子,如 onMounted
和 onBeforeUnmount
,但它们是通过 Composition API 中的钩子函数来使用的。
<script setup>
import { onMounted, onBeforeUnmount } from 'vue';onMounted(() => {console.log('组件已挂载');
});onBeforeUnmount(() => {console.log('组件即将卸载');
});
</script>
4. Vue 2 vs Vue 3 主要差异
4.1 响应式系统
Vue 2 使用 Object.defineProperty
来实现响应式数据,而 Vue 3 则使用了更加现代的 Proxy
API。这不仅使得 Vue 3 在性能上有显著提升,而且使得 Vue 3 能够处理更复杂的对象响应式。
4.2 逻辑组织
Vue 2 使用传统的选项式 API(data
、methods
、computed
),而 Vue 3 引入了 Composition API,允许我们根据功能来组织组件逻辑,提高了组件的可维护性和复用性。
4.3 TypeScript 支持
Vue 3 对 TypeScript 的支持更为完善,Composition API 与 TypeScript 配合使用时,类型推导变得更加准确,开发体验更加友好。
4.4 性能提升
Vue 3 对性能进行了大幅优化。通过 Proxy 实现的响应式系统、Tree Shaking 的支持和其他底层优化,Vue 3 在渲染速度和内存管理方面相较 Vue 2 有了显著提高。
5. 父子组件通信
无论在 Vue 2 还是 Vue 3 中,父子组件之间的通信是通过 props
和 emit
实现的。
父子组件通信(Vue 2 和 Vue 3)
<!-- Parent.vue -->
<template><Child :message="parentMessage" @updateMessage="updateParentMessage" />
</template><script>
import Child from './Child.vue';export default {components: { Child },data() {return {parentMessage: '这是父组件的消息'};},methods: {updateParentMessage(newMessage) {this.parentMessage = newMessage;}}
};
</script>
<!-- Child.vue -->
<template><div><p>{{ message }}</p><button @click="sendMessage">改变父组件的消息</button></div>
</template><script>
export default {props: ['message'],methods: {sendMessage() {this.$emit('updateMessage', '父组件的消息已更新');}}
};
</script>
在 Vue 2 和 Vue 3 中,父组件通过 props
接收数据,子组件通过 emit
向父组件发送事件。
6. 总结
Vue.js 作为一个现代的前端框架,其组件开发模式在 Vue 2 和 Vue 3 中有了显著的演变。从 Vue 2 到 Vue 3,Vue 在灵活性、性能、类型支持等方面进行了大幅改进,特别是 Composition API 的引入,为开发者提供了更多的灵活性和可维护性。如果你是刚接触 Vue 的开发者,Vue 2 仍然是一个非常优秀的选择;而如果你希望利用现代框架的优势,Vue 3 是一个值得深入学习和使用的版本。
希望本文能够帮助你更好地理解 Vue 组件的开发,掌握 Vue 2 和 Vue 3 中组件开发的主要差异和最佳实践。如果你对 Vue 有任何疑问,欢迎在评论区与我们交流!
相关文章:
Vue.js 组件开发深入解析:Vue 2 vs Vue 3
Vue.js 是一个渐进式框架,旨在通过声明式渲染和组件化开发来提高开发效率和可维护性。组件是 Vue 应用的基本组成部分,几乎所有的功能都可以通过组件来实现。随着 Vue 3 的发布,Vue.js 引入了许多新的特性,使得组件的开发变得更加…...
DeepSeek大模型一键部署解决方案:全平台多机分布式推理与国产硬件优化异构计算私有部署
DeepSeek R1 走红后,私有部署需求也随之增长,各种私有部署教程层出不穷。大部分教程只是简单地使用 Ollama、LM Studio 单机运行量化蒸馏模型,无法满足复杂场景需求。一些操作配置也过于繁琐,有的需要手动下载并合并分片模型文件&…...
多个用户如何共用一根网线传输数据
前置知识 一、电信号 网线(如以太网线)中传输的信号主要是 电信号,它携带着数字信息。这些信号用于在计算机和其他网络设备之间传输数据。下面是一些关于网线传输信号的详细信息: 1. 电信号传输 在以太网中,数据是…...
DeepSeek官方推荐的AI集成系统
DeepSeek模型虽然强大先进,但是模型相当于大脑,再聪明的大脑如果没有输入输出以及执行工具也白搭,所以需要有配套工具才能让模型发挥最大的作用。下面是一个典型AI Agent架构图,包含核心组件与数据流转关系: #mermaid-…...
el-select 添加icon
Element-ui-plus 新版本:Select 选择器 | Element Plus 要实现如上的效果 ,要用到具名插槽 prefix,看代码: <template><el-dialog ref"dialogRef" v-model"dialogVisible" :title"title"…...
Qt的QPushButton样式设置
在Qt中,可以通过样式表(QSS)为QPushButton设置丰富的样式。以下是常见样式设置方法的详细说明: 1. 基础样式 // 设置背景色、文字颜色、圆角边框 button->setStyleSheet("QPushButton {"" background-color…...
Java函数计算冷启动从8s到800ms的优化实录
在函数计算场景中,冷启动性能对用户体验至关重要。本文将分享如何将 Java 函数计算的冷启动时间从 8 秒优化到 800 毫秒,包括具体的技术手段和代码示例。 一、背景介绍 函数计算是一种事件驱动的计算服务,用户只需上传代码,无需管理服务器。但在实际使用中,函数计算的冷…...
通过例子学 rust 个人精简版 1-1
1-1 Hello World fn main() {println!("Hello World!");// 动手试一试println!("Im a Rustacean!"); }Hello World! Im a Rustacean!要点1 :println 自带换行符 注释 fn main() {let x 5 /* 90 */ 5;println!("Is x 10 or 100? x …...
STM32、GD32驱动TM1640原理图、源码分享
一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…...
Centos安装php-8.0.24.tar
查看系统环境 cat /etc/redhat-release 预先安装必要的依赖 yum install -y \ wget \ gcc \ gcc-c \ autoconf \ automake \ libtool \ make \ libxml2 \ libxml2-devel \ openssl \ openssl-devel \ sqlite-devel yum update 1、下载解压 cd /data/ wget https:/…...
VNC远程控制Mac
前言 macOS系统自带有VNC远程桌面,我们可以在控制端上安装配置VNC客户端,以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制,为此,我们可以在macOS被控端上使用cpolar做内网穿透,映射VNC默认端口5…...
基于大数据的北京市天气数据分析系统的设计与实现
【Flask】基于Flask的北京市天气数据分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python和Flask框架,结合Pandas、NumPy等数据处理库及Echarts进…...
20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头【下载安装】
20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头 2025/2/14 9:10 缘起:笔记本电脑在ubuntu20.04下使用Guvcview录制自带的摄像头,各种问题。 1、降帧率。WIN10/11自带的相机应用可以满速30fps,马上重启到ubuntu20.04&#…...
OpenEuler学习笔记(三十):在OpenEuler上搭建3D建模环境
在OpenEuler上搭建3D建模环境,通常可以选择一些常见的3D建模软件,如Blender、FreeCAD等。以下以搭建Blender和FreeCAD这两款软件的使用环境为例,为你详细介绍搭建步骤。 搭建Blender 3D建模环境 1. 更新系统软件包 首先,确保系…...
Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力
文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…...
Ubuntu添加桌面快捷方式
以idea为例 一. 背景 在ubuntu中,很多时候是自己解压的文件并没有桌面快捷方式,需要自己找到对应的目录的执行文件手动打开,很麻烦 而只需要在 /usr/share/applications 中创建自定义的desktop文件就能自动复制到桌面 二. 添加方法 创建desk…...
教程:使用 Vue 3 和 arco 实现表格合并
1. 功能概述 本教程将介绍如何使用 Vue 3 和 arco 组件库实现表格合并功能。具体来说,我们会根据表格数据中的某个字段(如 type)对表格的某一列(如入库类型列)进行合并,同时将质检说明列合并为一列。 2. …...
【MySQL数据库】Ubuntu下的mysql
目录 1,安装mysql数据库 2,mysql默认安装路径 3,my.cnf配置文件? 4,mysql运用的相关指令及说明 5,数据库、表的备份和恢复 mysql是一套给我们提供数据存取的,更加有利于管理数据的服务的网络程序。下…...
Java实现MinIO上传PDF文件并配置浏览器在线打开而非下载
在Minio中上传PDF文件后,通常文件的访问方式(即URL)是配置为允许下载文件的,因为大多数Web服务器和存储服务默认将PDF文件视为应下载的内容类型(Content-Type: application/pdf)。但是,如果你想…...
CSV格式和普通EXCEL格式文件的区别
CSV 文件(.csv) 普通的 Excel 文件(.xlsx 或 .xls) 主要体现在 文件格式、数据存储、功能支持 等方面: 文件格式 比较项CSV 文件 (.csv)Excel 文件 (.xlsx/.xls)文件类型纯文本文件二进制或 XML 格式数据分隔逗号(,)…...
安卓基础(持续更新的笔记)
为什么要这样: // 创建请求体RequestBody body RequestBody.create(MediaType.parse("application/json; charsetutf-8"),jsonObject.toString()); jsonObject 就包含了一个 JSON 数据,它其实就是: {"name": "张…...
大模型Deepseek的使用_基于阿里云百炼和Chatbox
目录 前言1. 云服务商2. ChatBox参考 前言 上篇博文中探索了(本地)部署大语言模型,适合微调、数据高隐私性等场景。随着Deepseek-R1的发布,大语言模型的可及性得到极大提升,应用场景不断增加,对高可用的方…...
数学建模基础训练-1:概念解析
文章目录 数学建模基础训练-1:概念解析问题一:如何找到“概念”?问题二:如何全面理解概念的基础含义?问题三:如何深刻理解概念并作出创新点发掘?实际举例问题一 :研究并给出寒假开学某大学返校交…...
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test characterEncodingutf8&useSSLfalse #连接数据库的名 spring.datasourc…...
联邦学习中的“参数聚合“机制详解:医疗数据隐私保护的技术实现路径
一、技术原理:参数聚合的数学本质 1.1 核心数学公式 联邦平均算法(FedAvg): \theta_{global}^{t1} \sum_{k1}^K \frac{n_k}{N} \theta_k^t其中: K K K:参与本轮训练的客户端数量 n k n_k nkÿ…...
LVS 负载均衡集群(NAT模式)
一、环境准备 四台主机(一台 LVS、两台 RS、一台客户端) 注意每个虚拟机都需要关闭防火墙和 selinux 1.1.LVS 主机 LVS 主机(两块网卡) 第一块:NAT模式(内网) 第二块:添加网卡&am…...
Rocky Linux系统修改网卡全攻略
Rocky Linux系统修改网卡全攻略 Rocky Linux系统修改网卡全攻略一、了解网卡相关知识二、查看当前网卡配置(一)使用ip命令(二)使用ifconfig命令(需安装)三、修改网卡配置文件(一)修改IP地址(二)修改网关和DNS服务器(三)保存并退出配置文件四、重启网络服务使配置生…...
常用查找算法整理(顺序查找、二分查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
常用的查找算法: 顺序查找:最简单的查找算法,适用于无序或数据量小的情况,逐个元素比较查找目标值。二分查找:要求数据有序,通过不断比较中间元素与目标值,将查找范围缩小一半,效率…...
自动化办公|xlwings 数据类型和转换
xlwings 数据类型和转换:Python 与 Excel 的桥梁 在使用 xlwings 进行 Python 和 Excel 数据交互时,理解两者之间的数据类型对应关系至关重要。本篇将详细介绍 Python 数据类型与 Excel 数据类型的对应关系,以及如何进行数据类型转换。 一、…...
Edge浏览器清理主页
我们都知道,Microsoft Edge浏览器是微软创造的搜索浏览器,Windows10、11自带。但是你可以看到,每次你打开Edge浏览器的时候都可以看到许多的广告,如图: 导致打开Edge浏览器的时候会遭受卡顿,广告骚扰&#…...
RedHat8安装postgresql15和 postgis3.4.4记录及遇到的问题总结
安装包对照版本参考 UsersWikiPostgreSQLPostGIS – PostGIS 如果Red Hat系统上有旧版本的PostgreSQL需要卸载 在较新的Red Hat版本,使用dnf包管理器卸载:sudo dnf remove postgresql-server postgresql 旧版本,使用yum包管理器卸载 sudo y…...
Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Python 文本探秘:正则表达式的易错迷宫穿越 -- 7. 正则表达式
正则表达式是 Python 中处理文本的强大武器,但它复杂的语法和规则构成了一个易错迷宫。本文深入剖析了正则表达式模式编写的错误、匹配规则的误解、性能优化的忽视等问题。通过大量的文本处理实例,展示了错误的正则表达式使用方式以及正确的解决方案。帮…...
Ubuntu22.04通过Docker部署Jeecgboot
程序发布环境包括docker、mysql、redis、maven、nodejs、npm等。 一、安装docker 1、用如下命令卸载旧Docker: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2、安装APT环境依赖包…...
数据结构 二叉树
一、⼆叉树的定义 ⼆叉树是⼀种特殊的树型结构,它的特点是每个结点⾄多只有2棵⼦树(即⼆叉树中不存在度⼤于2的结点),并且⼆叉树的⼦树有左右之分,其次序不能任意颠倒。 ⼆叉的意思是这种树的每⼀个结点最多只有两个孩…...
基于python sanic框架,使用Nacos进行微服务管理
微服务软件系统构建方式,已经很普及了,通过开源的sanic进行微服务管理,便捷,技术也比较成熟,而在项目实际应用过程中,微服务类型不仅有java的,还有nodejs、python等,尤其是结合算法模型构建的python接口,需要在Nacos进行注册管理。本文内容耗时2天踏坑,亲测一切ok。 …...
hbase合并队列超长问题分析
问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...
【设计模式】【行为型模式】解释器模式(Interpreter)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库
“DeepSeek-R1的输出,蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果,通过知识蒸馏技术训练出6个参数规模较小的模型,以下是具体解释: - **知识蒸馏技术原理**:知识蒸馏是一种模型压缩技术,核…...
无人机航迹规划:互联银行系统优化(Connected Banking System Optimizer,CBSO)求解无人机路径规划MATLAB
一、互联银行系统优化算法 互联银行系统优化(Connected Banking System Optimizer,CBSO)算法是2024年由Mehrdad Nemati等人提出的一种智能优化算法,其灵感来源于银行系统之间的连接和交易过程。在银行系统中,核心银行…...
学习web数据埋点
什么是埋点,以及为什么需要埋点 通过代码主动收集用户行为数据(如点击、浏览、停留时长等),用于数据分析驱动产品优化。 一、前端埋点 在客户端(浏览器、移动端应用)直接采集用户行为数据,通…...
Windows 11 安装 Docker
1.以管理员身份打开 Windows PowerShell 2.执行下面三行命令来启动WSL和虚拟机平台 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norest…...
深度学习框架探秘|Keras:深度学习的魔法钥匙
一、引言:深度学习浪潮中的 Keras 前面的文章我们探秘了深度学习框架中的两大明星框架 —— TensorFlow 和 PyTorch 以及 两大框架的对比 在深度学习的众多框架中,还有一款框架备受开发者们的喜爱 —— Keras 。它就像是一位贴心的助手,为我…...
HTML【详解】input 标签
input 标签主要用于接收用户的输入,随 type 属性值的不同,变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称,在表单提交时,服务器通过该名称来获取对应的值disabled布尔值禁用输入框,使其无法被…...
在vscode中拉取gitee里的项目并运行
拉取项目: 方法一:vscode点击查看--->终端(或者直接通过快捷键ctrol+ `打开) 在终端内通过cd命令定位到你想存放项目的文件夹 例如:cd h: 通过命令:git clone 地址 例如:git clone newbee-mall-vue-app: 前端代码 等待拉取完成即可在对应文件夹下看到项目啦 方…...
Spring Cloud微服务
一、定义 微服务,又叫微服务架构,也就是分布式架构,是软件架构的一种方式。它将一个大的单体架构应用拆分成一系列按业务领域划分模块的、小的自治服务。 如开发部有很多任务,如果把任务给了一个组的话,效率肯定会降低…...
打破AI黑盒,拥抱开源力量:基于openGauss+DeepSeek的本地知识库,打造你的专属AI助手!
引言:什么是RAG和LLM? LLM (Large Language Model,大语言模型): 就像 ChatGPT 这样的 AI 模型,拥有强大的语言理解和生成能力,但它们的知识局限于训练数据,且可能产生“幻觉”(即生成不准确的信…...
如何在 IntelliJ IDEA 中使用 Bito AI 插件
如何在 IntelliJ IDEA 中使用 Bito AI 插件 Bito: On-Demand AI Code Reviews Bito AI 插件是一个智能开发工具,能够帮助开发者提升编码效率,自动化生成代码、注释、单元测试等。本文将详细介绍 Bito AI 插件在 IntelliJ IDEA 中的使用方法,…...
用xml配置spring, bean标签有哪些属性?
用xml配置spring, bean标签有哪些属性? 在Spring框架中,使用XML配置文件时,<bean>标签用于定义一个Bean。以下是一些常用的<bean>标签属性: 1. class 描述:指定Bean的类名。示例:<bean id"myBe…...
微信小程序中缓存数据全方位解惑
微信小程序中缓存数据全方位解惑 微信小程序中的数据缓存是提升用户体验和优化性能的重要手段,跟电脑浏览器中的Local Storage的性质一样。以下是关于微信小程序数据缓存的相关知识点和示例的详细介绍: 1. 数据缓存的类型 微信小程序提供了两种数据缓…...