深入实战探究 Vue 2.7 Composition API 的强大之处

news2025/1/21 22:07:59

最近几年公司开发一直使用的是 Vue2.6,对于逻辑复用使用的是 Mixin 方式,但随着项目体量的增加,带了一些问题,特别是:数据混乱问题:实例上的数据属性从当前模板文件中无法查取到,存在多个 Mixin 时该问题会变得变得更难以追踪;同时,多个 Mixin 中也可能出现相同属性名,产生冲突。

最近项目中升级了 Vue2.7,关于升级方法,大家可以参考官方文档:迁移至 Vue 2.7

我们的原则是:已存在的业务模块依然保持 Options Api 方式;新增加的全部切换为 Composition Api。基于这样的原则,整个迁移过程,个人认为还是比较丝滑的。

最近也使用 Composition Api 完成了一些模块的开发工作,特总结一下与原 Options Api 的差异,总结一下 Composition Api 强大之处。

Composition API:Vue 2.7 版本引入了一种全新的特性,它是一种新的组织和复用 Vue 组件逻辑的方式,引入了一些强大的功能,使得组件的逻辑更加清晰、灵活和可复用。

本文将深入探讨 Vue 2.7 Composition API 的一些关键特性和优点。

什么是Composition API

Composition API是 Vue 2.7 中引入的一种新的组件逻辑复用方式。它与 Vue 之前的 Options API 有很大的不同。

  • Options API:基于对象的方式,将组件的各种选项,如data、methods、computed等,组织在一个对象中;
  export default {
    data () {},
    computed: {},
    methods: {}
  }
  • Composition API:允许我们将组件的逻辑拆分成更小的、可复用的部分,称为composition函数。
  export default {
    setup() {}
  }

或者

  <script setup></script>  

Composition API 的优点

在实际开发过程中,使用 Composition API 带来了一些显著的优点,使得组件可以更加灵活、清晰,复用性也得到显著提高。

1. 更灵活的组件逻辑复用

Composition API 允许将组件的逻辑拆分成更小的、可复用的 composition 函数。这使得可以更灵活地组合和复用组件逻辑,而不仅仅是通过组件的选项进行组织。可以将多个 composition 函数组合在一起,形成更复杂的逻辑,从而实现更高度的组件复用。

<script setup>
import { ref } from 'vue'
import { useIdssDialogStartWatchForm, useIdssDialogCloseConfirm } from '@/compositions/closeConfirm.js'

const form = ref({})
watch(() => props.visible, (val) => {
  // 监听form值是否发生变化
	val && useIdssDialogStartWatchForm(form)
})
function beforeClose (done) {
  // 如form值发生变化,关闭前给出提示
  useIdssDialogCloseConfirm(done, $idssFormChange)
}
</script>

便利: 类似于纯函数,整个封装颗粒度可以更小,且复用场景更大(脱离了 this

2. 更强大的响应式能力

Composition API 引入了refreactive等新的响应式API,能够更方便地管理组件的状态。

  • ref:用于创建一个可以在模板中使用的响应式变量
  • reactive:可以将一个普通的JavaScript对象转换为响应式对象
<template>
	<div>{{count}}</div>
</template>

<script setup>
const count = ref(0)
function add () {
  count.value++
}
</script>  

便利: 可以更加直观地管理组件的状态,并且不再需要像以前那样使用 data 选项来声明变量

3. 更清晰的组件逻辑

通过使用 Composition API,可以将组件的不同逻辑拆分成独立的 composition 函数,从而让组件的逻辑更加清晰和易于理解。每个 composition 函数都可以专注于解决一个特定的问题,使得组件的逻辑更加模块化和可维护。

// closeConfirm.js
export function useIdssDialogStartWatchForm(variableName) {}
export function useIdssDialogCloseConfirm(done = function () {}, $idssFormChange) {}

便利: 可以类似工具函数的方式分类管理,需要时直接引入即可

4. 更好的类型检查和编辑器支持

由于Composition API 是基于函数的方式来组织组件逻辑,这意味着可以在编写代码时获得更好的类型检查和编辑器支持。编辑器可以更好地识别 composition 函数的参数和返回值,并提供相关的代码提示和自动补全,这可以提高开发效率,减少错误。
在这里插入图片描述
便利: 我们项目中并没有启用 typescript,但通过编辑器相应的功能支持,已经可以体现因为函数方式带来的便利。

5. 更好的性能

Composition API 在一些性能指标上优于Options API。由于 Composition API 使用了更加高效的响应式系统,它可以更好地处理大规模的组件状态更新。

同时,为了最大化提升性能,还提供了浅层(不会被深层递归地转为响应式)作用的相关方式 shallowRef()shallowReactive() 等。

const state = shallowReactive({
  foo: 1,
  nested: {
    bar: 2
  }
})

// 更改状态自身的属性是响应式的
state.foo++
// ...但下层嵌套对象不会被转为响应式
isReactive(state.nested) // false
// 不是响应式的
state.nested.bar++

便利: 针对不同场景,更有针对性使用不同的方法,提升了页面渲染速度。

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

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

相关文章

API 鉴权都有哪些分类,这些重点不要错过

API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权&#xff0c;系统可以对用户或者应用进行有效的身份认证和权限管理。一般来说&#xff0c;在实际开发中&#xff0c;我们使用以下几种API鉴权方式&#xff1a; 1. 基本认证 基本认证是API鉴权的一种最基本形式。此方…

如何创建Spring项目

创建Spring项目 创建一个Maven项目 这里使用的是2023版本的idea。 添加Spring框架支持 在项目的pom.xml中添加Spring支持。这里可以到中央仓库找一下。 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dep…

Android Binder 图文解释和驱动源码分析

前言 最近在学习Binder&#xff0c;之前都是跳过相关细节&#xff0c;通过阅读文章对Binder有了一些认识&#xff0c;但是并没有真正理解Binder。如果要深入理解Framework的代码&#xff0c;就必须要真正理解Binder。 我学习Binder的方法&#xff1a; 一边阅读Gityuan的Bind…

视觉语言模型究竟能帮助我们完成哪些工作?

当前&#xff0c;多模式人工智能已经成为一个街谈巷议的热门话题。随着GPT-4的最近发布&#xff0c;我们看到了无数可能出现的新应用和未来技术&#xff0c;而这在六个月前是不可想象的。事实上&#xff0c;视觉语言模型对许多不同的任务都普遍有用。例如&#xff0c;您可以使用…

vmware VM虚拟机去虚拟化教程 硬件虚拟机 过鲁大师检测

一 准备工作 1. 这里演示的VM虚拟机版本是12.5.9 虚拟机系统是win7 64位 2. 用到的工具 winhex和Phoenix BIOS Editor 下载地址工具 链接&#xff1a;https://pan.baidu.com/s/1b3FfA3FyQ_lnFQSjpCGLGg?pwd1221 提取码&#xff1a;1221 3. 注意&#…

【2023 · CANN训练营第一季】昇腾AI入门课(Pytorch)---昇腾AI入门课(上)

AscendCL快速入门 AscendCL概述 AscendCL功能介绍 AscendCL基础概念解析 应用开发流程 样例代码精讲

Vivado综合参数设置

如果你正在使用Vivado开发套件进行设计&#xff0c;你会发现综合设置中提供了许多综合选项。这些选项对综合结果有着潜在的影响&#xff0c;而且能够提升设计效率。为了更好地利用这些资源&#xff0c;需要仔细研究每一个选项的功能。本文将要介绍一下Vivado的综合参数设置。 …

SpringBoot解决用户重复提交订单(方式一:通过唯一索引实现)

文章目录 前言1、方案实现1.1、给数据库表增加唯一键约束1.2、编写获取请求唯一ID的接口1.3、业务提交的时候&#xff0c;检查唯一ID 2、小结 前言 对于投入运营的软件系统&#xff08;商城、物流、工厂等&#xff09;&#xff0c;最近小编在巡检项目数据库的时候&#xff0c;发…

【场景生成与削减】基于蒙特卡洛法场景生成及启发式同步回带削减风电、光伏、负荷研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

学习笔记 -- C++性能评估工具Perf

Installation sudo apt update sudo apt install linux-tools-common查看你的内核&#xff1a; uname -r我的输出&#xff1a; $ uname -r 5.15.0-67-generic安装对应的 tools&#xff1a; sudo apt install linux-tools-5.15.0-67-genericImplementation 1、Perf List 状…

PyTorch 人工智能研讨会:1~5

原文&#xff1a;The Deep Learning with PyTorch Workshop 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心…

vmware 打开报错

Error: VMware Workstation failed? I downloaded ccleaner to free up my ram and to get rid of some junk files. I ran ccleaner, tried to start my vmware and I got the error message “VMware Workstation failed to start the VMware Authorization Service. You ca…

WPS两次变身:超级会员+超级表格,完美逆袭,这次再也不输office

WPS会员变“超级会员” WPS宣布会员服务升级&#xff0c;将原有的“WPS会员”、“稻壳会员”及“超级会员”进行合并&#xff0c;推出“WPS超级会员”&#xff0c;提供了Pro和基础两个版本套餐。 过去被吐槽的“套娃式”收费被整合&#xff0c;你可以根据日常办公和专业办公的…

数据结构——AVL树

AVL树 概念节点定义插入旋转左单旋与右单旋双旋转 验证AVL树删除&#xff08;了解&#xff09; 概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。 因此…

抛弃丑陋的try-catch,优雅处理异常

随着业务逻辑变得越来越复杂&#xff0c;我们在编写代码时会遇到各种异常情况&#xff0c;这时就需要使用try-catch语句来捕获异常并进行处理。但是&#xff0c;大量的try-catch语句会让代码变得臃肿&#xff0c;不易维护&#xff0c;因此&#xff0c;我们需要一种优雅的方式来…

UDS统一诊断服务【六】访问时序参数0X83服务

文章目录 前言一、访问时序参数服务介绍二、数据格式2.1 请求报文2.2 子功能2.3 响应 三、举例 前言 本文介绍UDS统一诊断服务的访问时序参数0X83服务&#xff0c;希望能对你有所帮助 一、访问时序参数服务介绍 这个服务我目前在项目中没怎么用到过&#xff0c;先来看看ISO14…

【三十天精通Vue 3】第十三天 Vue 3 的插件详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、插件概述1.1 插件简介1.2 插件的使用1.3 插件的分类 二、…

五、vue基础-指令之v-bind

一、v-bind 前面要讲的一系列指令&#xff0c;主要是将值插入到模板内容中。 但是&#xff0c;除了内容需要动态来决定外&#xff0c;某些属性我们也希望动态来绑定。 比如动态绑定a元素的href属性&#xff1b;比如动态绑定img元素的src属性&#xff1b; 绑定属性我们使用v-…

智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 ​智能电网是一种典型的信息物理融合系统,也是关系国民经济发展和国家安全的重大关键基础设施,其安全稳定运行至关重要。近年来…

java某百货店POS积分管理系统_积分点更新生成以及通票回收处理

百货店是生活中不可缺少的一部分&#xff0c;为了给顾客提供更方便的服务平台以及更好的服务质量&#xff0c;而设计了POS积分管理系统。百货店通过点积分的管理获得顾客更好的信誉&#xff0c;增加客户流量&#xff0c;获得更多的利益。在百货店经营的过程中&#xff0c;每天的…