当前位置: 首页 > news >正文

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 用于创建计算属性,以及一些生命周期钩子函数,如 onMountedonUpdatedonUnmounted 等。通过这些函数,你可以更加灵活地组织和管理你的组件逻辑。

组合式 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 具有一些优点,尤其在处理复杂组件和大型应用时。

  1. 更灵活的组织结构: 组合式 API 允许你通过逻辑相关的功能块来组织代码,而不是按照生命周期钩子和选项的方式来组织。这使得代码更具可读性和可维护性。

  2. 更好的代码复用: 组合式 API 支持将逻辑提取到可复用的函数中,使得这些逻辑可以在不同组件之间共享。这有助于减少重复代码,提高代码的可维护性。

  3. 更好的 TypeScript 支持: 组合式 API 在 TypeScript 中的支持更好,因为它提供了更明确的类型推断和更容易推导的类型。这有助于减少潜在的类型错误,并提高代码的稳定性。

  4. 更好的响应性处理: 组合式 API 中的响应式函数(如 refreactive)使得数据的响应式处理更加直观。通过 refreactive,你可以明确地声明哪些数据是响应式的,而不需要依赖于 Vue 2 中的 data 选项。

  5. 更清晰的生命周期: 组合式 API 中的生命周期钩子是通过函数来定义的,而不是作为选项来定义的。这使得生命周期钩子的顺序更加清晰,易于理解。

  6. 更好的逻辑复杂性处理: 对于复杂的业务逻辑,组合式 API 允许将逻辑拆分为小的功能块,每个功能块都有其自己的状态和方法。这降低了理解和维护复杂组件的难度。

相比React Hooks

Vue 3 的组合式 API 与 React 的 Hooks 在某些概念上有一些相似之处,因为它们都是为了解决在函数式组件中复用逻辑的问题。然而,它们在具体实现和一些概念上有一些区别。

相似之处

  1. 函数式组件: 组合式 API 和 React Hooks 都是为了函数式组件而设计的。它们让你在不使用类组件的情况下,能够在组件之间共享和复用逻辑。

  2. 逻辑复用: 两者的目标都是使逻辑能够在组件之间进行复用,而不必依赖于继承的方式。

区别

组合式 API 和 React Hooks 都是为了解决在函数式组件中复用逻辑的问题,但它们在具体实现和使用方式上有一些不同。熟悉其中一个并不会让你自动熟悉另一个,但它们共同推动了前端开发中对于更灵活和可维护组件的需求。

  1. API 设计:

    • 组合式 API: Vue 3 的组合式 API 使用 setup 函数,并通过返回一个对象来暴露组件内部的状态和方法。
    • React Hooks: React 的 Hooks 使用一系列以 “use” 开头的函数(如 useStateuseEffect 等),通过这些函数来管理状态和副作用。
  2. 响应式系统:

    • 组合式 API: Vue 3 的组合式 API 使用 refreactive 等函数来创建响应式数据。
    • React Hooks: React 使用 useState 来管理状态,但它的响应式系统不同于 Vue,是基于不可变性的原则。
  3. 生命周期:

    • 组合式 API: Vue 3 中使用 onMountedonUpdatedonUnmounted 等函数来处理生命周期事件。
    • React Hooks: React 使用 useEffect 来处理副作用,而不像 Vue 3 中的生命周期钩子那样区分不同的阶段。
  4. 上下文传递:

    • 组合式 API: Vue 3 中可以使用 provideinject 在组件树中传递数据。
    • React Hooks: React 使用 Context 来实现组件树中的数据传递。
  5. TypeScript 支持:

    • 组合式 API: 组合式 API 在 TypeScript 中的支持相对较好,类型推断更直观。
    • React Hooks: React Hooks 也能在 TypeScript 中使用,但需要一些额外的类型声明。

对于使用那种,根据项目和团队喜好决定。官网也说了选项式API不会被放弃,选项式 API 也是 Vue 不可分割的一部分,也有很多开发者喜欢它。我们也意识到组合式 API 更适用于大型的项目,而对于中小型项目来说选项式 API 仍然是一个不错的选择。

相关文章:

Vue3为什么会推出组合式API

前言 大学前端入门学的vue2&#xff0c;工作了又用的React&#xff0c;现在想学习一下Vue3&#xff0c;开篇就介绍了组合式API&#xff0c;这和我认知里的vue2的选项式API区别还是蛮大的。本篇文章简单介绍一下组合式API。 什么是组合式API Vue 3引入了一种新的 API&#xf…...

windows11 phpstudy_pro php8.2 安装redis扩展

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

中英双语大模型ChatGLM论文阅读笔记

论文传送门&#xff1a; [1] GLM: General Language Model Pretraining with Autoregressive Blank Infilling [2] Glm-130b: An open bilingual pre-trained model Github链接&#xff1a; THUDM/ChatGLM-6B 目录 笔记AbstractIntroductionThe design choices of GLM-130BThe …...

力扣题:字符串的反转-11.24

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

NIO--07--Java lO模型详解

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

OpenSSH 漏洞修复升级最新版本

Centos7系统ssh默认版本一般是OpenSSH7.4左右&#xff0c;低版本是有漏洞的而且是高危漏洞&#xff0c;在软件交付和安全扫描上是过不了关的&#xff0c;一般情况需要升级OpenSSH的最新版本 今天详细说下升级最新版本的处理过程&#xff08;认真看会发现操作很简单&#xff0c…...

【数据结构和算法】无限集中的最小数字

其他系列文章导航 Java基础合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、总结 前言 这是力扣的2336题&#xff0c;难度为中等&#xff0c;解题方案有很多种&#xff0c;本文讲解我认为…...

SimpleDataFormat 非线程安全

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

SpringBoot : ch12 多模块配置YAML文件

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

TensorRT之LeNet5部署(onnx方式)

文章目录 前言LeNet-5部署1.ONNX文件导出2.TensorRT构建阶段(TensorRT模型文件)&#x1f9c1;创建Builder&#x1f367;创建Network&#x1f36d;使用onnxparser构建网络&#x1f36c;优化网络&#x1f361;序列化模型&#x1f369;释放资源 3.TensorRT运行时阶段(推理)&#x…...

Xilinx FPGA平台DDR3设计详解(二):DDR SDRAM组成与工作过程

本文主要介绍一下DDR SDRAM的基本组成以及工作过程&#xff0c;方便大家更好的理解和掌握DDR的控制与读写。 一、DDR SDRAM的基本组成 1、SDRAM的基本单元 SDRAM的基本单元是一个CMOS晶体管和一个电容组成的电路。 晶体管最上面的一端&#xff0c;称作栅极&#xff0c;通过…...

ios(swiftui) 属性包装器详解

目录 1. State 2. Binding 3. ObservedObject 和Published 4. StateObject 5. EnvironmentObject和Environment 6. AppStorage 在 SwiftUI 中&#xff0c;属性包装器用于增强和管理视图的状态&#xff0c;以及处理视图与数据模型之间的绑定和交互。下面是一些常见…...

【智能家居】面向对象编程OOP和设计模式(工厂模式)

面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种程序设计范式&#xff0c;其中程序被组织成对象的集合&#xff0c;每…...

Docker安装Memcached+Python调用

简介&#xff1a;Memcached是一个通用的分布式内存缓存系统。它通常用于通过在RAM中缓存数据和对象来加速动态数据库驱动的网站&#xff0c;以减少必须读取外部数据源&#xff08;如数据库或API&#xff09;的次数。Memcached的API提供了一个分布在多台机器上的非常大的哈希表。…...

网页开发 HTML

目录 HTML概述 HTML结构 HTML标签语法 基本标签 标题标签 换行标签 段落标签 文本格式化标签 特殊符号 div和span标签 超链接标签 锚点 img标签 列表标签 表格标签 表单标签 HTML概述 HTML&#xff0c;即超文本标记语言&#xff08;HyperText Markup Language …...

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP&#xff08;五&#xff09;&#xff1a;使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本&#xff0c;请访问 github。 XGBoost 等梯度增强机方法对于具有…...

LeetCode 8 字符串转整数

题目描述 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一…...

前缀和 LeetCode1423. 可获得的最大点数

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

探索意义的深度:自然语言处理中的语义相似性

一、说明 语义相似度&#xff0c;反应出计算机对相同内容&#xff0c;不同表达的识别能力。因而识别范围至少是个句子&#xff0c;最大范围就是文章&#xff0c;其研究方法有所区别。本文将按照目前高手的研究成绩&#xff0c;作为谈资介绍给诸位。 二、语义相似度简介 自然语言…...

WT2605-24SS高品质录音语音芯片:实时输出、不保存本地,引领音频技术新潮流

随着科技的快速发展&#xff0c;高品质音频技术成为了现代社会不可或缺的一部分。在这个追求高品质、高效率的时代&#xff0c;唯创知音推出的WT2605-24SS高品质录音芯片&#xff0c;以其独特的功能和卓越的性能&#xff0c;引领着音频技术的新潮流。 首先&#xff0c;WT2605-…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Python】 -- 趣味代码 - 小恐龙游戏

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

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

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看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;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. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...