Vue3为什么会推出组合式API
前言
大学前端入门学的vue2,工作了又用的React,现在想学习一下Vue3,开篇就介绍了组合式API,这和我认知里的vue2的选项式API区别还是蛮大的。本篇文章简单介绍一下组合式API。
什么是组合式API
Vue 3引入了一种新的 API,称为“组合式 API”(Composition API)。与以前的选项式 API 不同,组合式 API 允许开发者将代码组织成逻辑相关的功能块,而不是按照选项的生命周期钩子来组织。这使得代码更加灵活、可维护,并且更容易重用。
组合式 API 的核心特性是 setup
函数,它是在组件实例创建之前被调用的。setup
函数返回一个对象,该对象中包含了在组件中使用的响应式数据、计算属性、方法等。
举个简单的例子来看看这么用:
<template><div><p>{{ message }}</p><button @click="reverseMessage">Reverse Message</button></div>
</template><script>
import { ref } from 'vue';export default {setup() {// 使用 ref 创建响应式数据const message = ref('Hello, Vue!');// 定义一个方法const reverseMessage = () => {message.value = message.value.split('').reverse().join('');};// 返回组件实例中需要用到的数据和方法return {message,reverseMessage};}
};
</script>
在这个例子中,setup
函数中使用了 ref
函数创建了一个名为 message
的响应式数据,并定义了一个 reverseMessage
方法。在模板中,通过 {{ message }}
显示了这个响应式数据,并通过 @click
绑定了按钮的点击事件。
组合式 API 还提供了其他一些函数,例如 reactive
用于创建响应式对象,computed
用于创建计算属性,以及一些生命周期钩子函数,如 onMounted
、onUpdated
、onUnmounted
等。通过这些函数,你可以更加灵活地组织和管理你的组件逻辑。
组合式 API 的引入让 Vue 更适用于大型应用和更复杂的场景,同时保持了简单性和可读性。
什么又是选项式API
选项式 API(Options API)是 Vue 2 中的主要 API,它使用对象来定义组件的选项。选项式API在简单的应用中直观和易用,但当应用逻辑变得复杂时,组件可能会包含大量的选项,导致组件定义变得冗长且难以维护。
在 Vue 2 中,一个组件的定义通常包括以下选项:
data
选项用于定义组件的数据。props
参数, 用于接收父组件传递的数据。methods
选项用于定义组件的方法。watch
监听属性。computed
用于定义计算属性。计算属性是基于响应式数据计算而来的属性,具有缓存机制,只在相关依赖发生变化时才重新计算。created、mounted、updated、destroyed
: 生命周期钩子,用于在组件的不同生命周期阶段执行相应的操作。
还有其他选项,这里就不一一列举了,这些选项将一起形成一个对象,作为 Vue 组件的定义。
export default {data() {return {message: 'Hello, Vue!'};},watch: {'someData': function(newVal, oldVal) {// 处理变化}
},
computed: {fullName() {return this.firstName + ' ' + this.lastName;}
},methods: {reverseMessage() {this.message = this.message.split('').reverse().join('');}},template: `<div><p>{{ message }}</p><button @click="reverseMessage">Reverse Message</button></div>`
};
组合式API的优势
组合式 API 相对于选项式 API 具有一些优点,尤其在处理复杂组件和大型应用时。
-
更灵活的组织结构: 组合式 API 允许你通过逻辑相关的功能块来组织代码,而不是按照生命周期钩子和选项的方式来组织。这使得代码更具可读性和可维护性。
-
更好的代码复用: 组合式 API 支持将逻辑提取到可复用的函数中,使得这些逻辑可以在不同组件之间共享。这有助于减少重复代码,提高代码的可维护性。
-
更好的 TypeScript 支持: 组合式 API 在 TypeScript 中的支持更好,因为它提供了更明确的类型推断和更容易推导的类型。这有助于减少潜在的类型错误,并提高代码的稳定性。
-
更好的响应性处理: 组合式 API 中的响应式函数(如
ref
和reactive
)使得数据的响应式处理更加直观。通过ref
和reactive
,你可以明确地声明哪些数据是响应式的,而不需要依赖于 Vue 2 中的data
选项。 -
更清晰的生命周期: 组合式 API 中的生命周期钩子是通过函数来定义的,而不是作为选项来定义的。这使得生命周期钩子的顺序更加清晰,易于理解。
-
更好的逻辑复杂性处理: 对于复杂的业务逻辑,组合式 API 允许将逻辑拆分为小的功能块,每个功能块都有其自己的状态和方法。这降低了理解和维护复杂组件的难度。
相比React Hooks
Vue 3 的组合式 API 与 React 的 Hooks 在某些概念上有一些相似之处,因为它们都是为了解决在函数式组件中复用逻辑的问题。然而,它们在具体实现和一些概念上有一些区别。
相似之处
-
函数式组件: 组合式 API 和 React Hooks 都是为了函数式组件而设计的。它们让你在不使用类组件的情况下,能够在组件之间共享和复用逻辑。
-
逻辑复用: 两者的目标都是使逻辑能够在组件之间进行复用,而不必依赖于继承的方式。
区别
组合式 API 和 React Hooks 都是为了解决在函数式组件中复用逻辑的问题,但它们在具体实现和使用方式上有一些不同。熟悉其中一个并不会让你自动熟悉另一个,但它们共同推动了前端开发中对于更灵活和可维护组件的需求。
-
API 设计:
- 组合式 API: Vue 3 的组合式 API 使用
setup
函数,并通过返回一个对象来暴露组件内部的状态和方法。 - React Hooks: React 的 Hooks 使用一系列以 “use” 开头的函数(如
useState
、useEffect
等),通过这些函数来管理状态和副作用。
- 组合式 API: Vue 3 的组合式 API 使用
-
响应式系统:
- 组合式 API: Vue 3 的组合式 API 使用
ref
、reactive
等函数来创建响应式数据。 - React Hooks: React 使用
useState
来管理状态,但它的响应式系统不同于 Vue,是基于不可变性的原则。
- 组合式 API: Vue 3 的组合式 API 使用
-
生命周期:
- 组合式 API: Vue 3 中使用
onMounted
、onUpdated
、onUnmounted
等函数来处理生命周期事件。 - React Hooks: React 使用
useEffect
来处理副作用,而不像 Vue 3 中的生命周期钩子那样区分不同的阶段。
- 组合式 API: Vue 3 中使用
-
上下文传递:
- 组合式 API: Vue 3 中可以使用
provide
和inject
在组件树中传递数据。 - React Hooks: React 使用
Context
来实现组件树中的数据传递。
- 组合式 API: Vue 3 中可以使用
-
TypeScript 支持:
- 组合式 API: 组合式 API 在 TypeScript 中的支持相对较好,类型推断更直观。
- React Hooks: React Hooks 也能在 TypeScript 中使用,但需要一些额外的类型声明。
对于使用那种,根据项目和团队喜好决定。官网也说了选项式API不会被放弃,选项式 API 也是 Vue 不可分割的一部分,也有很多开发者喜欢它。我们也意识到组合式 API 更适用于大型的项目,而对于中小型项目来说选项式 API 仍然是一个不错的选择。
相关文章:
Vue3为什么会推出组合式API
前言 大学前端入门学的vue2,工作了又用的React,现在想学习一下Vue3,开篇就介绍了组合式API,这和我认知里的vue2的选项式API区别还是蛮大的。本篇文章简单介绍一下组合式API。 什么是组合式API Vue 3引入了一种新的 API…...

windows11 phpstudy_pro php8.2 安装redis扩展
环境:windows11 phpstudy_pro php8.2.9 一、命令查看是否安装redis扩展 在对应网站中通过打开,,选择对应的PHP版本,用命令 php -m 查看自己的php 有没有redis扩展 上面如果有,说明已经安装了,如果没有安装࿱…...

中英双语大模型ChatGLM论文阅读笔记
论文传送门: [1] GLM: General Language Model Pretraining with Autoregressive Blank Infilling [2] Glm-130b: An open bilingual pre-trained model Github链接: THUDM/ChatGLM-6B 目录 笔记AbstractIntroductionThe design choices of GLM-130BThe …...

力扣题:字符串的反转-11.24
力扣题-11.24 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:151. 翻转字符串里的单词 解题思想:保存字符串中的单词即可 class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"&quo…...

NIO--07--Java lO模型详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 何为 IO?先从计算机结构的角度来解读一下I/o.再从应用程序的角度来解读一下I/O 阻塞/非阻塞/同步/异步IO阻塞IO非阻塞IO异步IO举例 Java中3种常见的IO模型BIO (Blo…...

OpenSSH 漏洞修复升级最新版本
Centos7系统ssh默认版本一般是OpenSSH7.4左右,低版本是有漏洞的而且是高危漏洞,在软件交付和安全扫描上是过不了关的,一般情况需要升级OpenSSH的最新版本 今天详细说下升级最新版本的处理过程(认真看会发现操作很简单,…...
【数据结构和算法】无限集中的最小数字
其他系列文章导航 Java基础合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、总结 前言 这是力扣的2336题,难度为中等,解题方案有很多种,本文讲解我认为…...

SimpleDataFormat 非线程安全
目录 前言 正文 1.出现异常 2.解决方法1 3.解决方法2 总结 前言 SimpleDateFormat 类是 Java 中处理日期和时间格式化和解析的类,但它并不是线程安全的。这意味着多个线程不能安全地共享一个 SimpleDateFormat 实例进行日期和时间的解析和格式化。当多个…...

SpringBoot : ch12 多模块配置YAML文件
前言 当您使用SpringBoot框架进行项目开发时,通常需要配置一些参数和属性。在实际开发中,可能需要将这些配置参数分成多个不同的YAML文件,并将它们组织到不同的模块中。这样可以方便管理和维护配置文件,并且可以避免配置文件的冲…...

TensorRT之LeNet5部署(onnx方式)
文章目录 前言LeNet-5部署1.ONNX文件导出2.TensorRT构建阶段(TensorRT模型文件)🧁创建Builder🍧创建Network🍭使用onnxparser构建网络🍬优化网络🍡序列化模型🍩释放资源 3.TensorRT运行时阶段(推理)&#x…...

Xilinx FPGA平台DDR3设计详解(二):DDR SDRAM组成与工作过程
本文主要介绍一下DDR SDRAM的基本组成以及工作过程,方便大家更好的理解和掌握DDR的控制与读写。 一、DDR SDRAM的基本组成 1、SDRAM的基本单元 SDRAM的基本单元是一个CMOS晶体管和一个电容组成的电路。 晶体管最上面的一端,称作栅极,通过…...
ios(swiftui) 属性包装器详解
目录 1. State 2. Binding 3. ObservedObject 和Published 4. StateObject 5. EnvironmentObject和Environment 6. AppStorage 在 SwiftUI 中,属性包装器用于增强和管理视图的状态,以及处理视图与数据模型之间的绑定和交互。下面是一些常见…...
【智能家居】面向对象编程OOP和设计模式(工厂模式)
面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,其中程序被组织成对象的集合,每…...
Docker安装Memcached+Python调用
简介:Memcached是一个通用的分布式内存缓存系统。它通常用于通过在RAM中缓存数据和对象来加速动态数据库驱动的网站,以减少必须读取外部数据源(如数据库或API)的次数。Memcached的API提供了一个分布在多台机器上的非常大的哈希表。…...
网页开发 HTML
目录 HTML概述 HTML结构 HTML标签语法 基本标签 标题标签 换行标签 段落标签 文本格式化标签 特殊符号 div和span标签 超链接标签 锚点 img标签 列表标签 表格标签 表单标签 HTML概述 HTML,即超文本标记语言(HyperText Markup Language …...

SHAP(五):使用 XGBoost 进行人口普查收入分类
SHAP(五):使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。 XGBoost 等梯度增强机方法对于具有…...
LeetCode 8 字符串转整数
题目描述 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一…...

前缀和 LeetCode1423. 可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…...

探索意义的深度:自然语言处理中的语义相似性
一、说明 语义相似度,反应出计算机对相同内容,不同表达的识别能力。因而识别范围至少是个句子,最大范围就是文章,其研究方法有所区别。本文将按照目前高手的研究成绩,作为谈资介绍给诸位。 二、语义相似度简介 自然语言…...
WT2605-24SS高品质录音语音芯片:实时输出、不保存本地,引领音频技术新潮流
随着科技的快速发展,高品质音频技术成为了现代社会不可或缺的一部分。在这个追求高品质、高效率的时代,唯创知音推出的WT2605-24SS高品质录音芯片,以其独特的功能和卓越的性能,引领着音频技术的新潮流。 首先,WT2605-…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...