vue中组合式API和选项式API的区别

组合式api(Composition API)是vue3对我们开发者来说变化非常大的更新,我们先不关注具体语法,先对它有一个大的感知。

通过vue2, vue3两种形式实现同一个需求,理解vue3的compition api 带来的好处

两个独立的功能:

  1. 通过点击按钮来控制div的显示和隐藏
  2. 通过点击按钮控制div内字体颜色的变化

用vue2实现这个需求

option Api

<template><div><!-- 功能模板一 --><button @click="show">显示</button><button @click="hide">隐藏</button><div class="box" v-if="showDiv">一个被控制显隐的div</div></div><div><!-- 功能模板二 --><button @click="changeRed">红色</button><button @click="changeYellow">蓝色</button><div class="box" :style="`color:${fontColor}`">一个被控制字体颜色的的div</div></div>
</template>
<style scoped>
.box{width:200px;height: 200px;line-height:200px;background-color: cornflowerblue;text-align: center;}
</style>
<script>
export default {name: 'App',data() {return {showDiv: true, // 功能一数据fontColor: '' // 功能二数据}},methods: {// 功能一方法show() {this.showDiv = true},hide() {this.showDiv = false},// 功能二方法changeRed() {this.fontColor = 'red'},changeYellow() {this.fontColor = 'blue'}}
}
</script>

用vue3来实现

composition api版本

<template><div><!-- 功能模板一 --><button @click="show">显示</button><button @click="hide">隐藏</button><div class="box"  v-if="showDivFlag">一个被控制显隐的div</div></div><div><!-- 功能模板二 --><button @click="changeRed">红色</button><button @click="changeBlue">蓝色</button><div class="box"  :style="`color:${fontColor}`">一个被控制字体颜色的的div</div></div>
</template>
<style scoped>
.box{width:200px;height: 200px;line-height:200px;background-color: cornflowerblue;text-align: center;}
</style>
<script>
import { ref } from 'vue'
export default {name: 'App',setup() {// 功能一const showDiv = ref(true)function show() {showDiv.value = true}function hide() {showDiv.value = false}// 功能二const fontColor = ref('')function changeRed() {fontColor.value = 'red'}function changeYellow() {fontColor.value = 'blue'}return { showDiv, show, hide, fontColor, changeRed, changeYellow }}
}
</script>

composition vs options

options API(Vue2)开发出来的vue应用如左图所示。它的特点是理解容易,好上手。因为各个选项都有固定的书写位置(比如数据就写到data选项中,操作方法就写到methods中,等等),应用大了之后,相信大家都遇到过来回上下找代码的困境。

composition API(Vue3)开发的vue应用如右图所示。它的特点是特定功能相关的所有东西都放到一起维护,比如功能A相关的响应式数据,操作数据的方法等放到一起,这样不管应用多大,都可以快读定位到某个功能的所有相关代码,维护方便设置,如果功能复杂,代码量大,我们还可以进行逻辑拆分处理

 

composition api版本优化

拆解setup功能代码成函数

通过定义功能函数,把两个功能相关的代码各自抽离到一个独立的小函数中,然后通过在setup函数中再把两个小功能函数组合起来,这样一来,我们既可以把setup函数变得清爽,又可以方便维护快速定位功能位置

<script>
import { ref } from 'vue'function useShow() {const showDivFlag = ref(true)function show() {showDivFlag.value = true}function hide() {showDivFlag.value = false}return { showDivFlag, show, hide }
}function useColor() {const fontColor = ref('')function changeRed() {fontColor.value = 'red'}function changeBlue() {fontColor.value = 'blue'}return { fontColor, changeRed, changeBlue }
}export default {name: 'App',setup() {// 功能一const { showDivFlag, show, hide } = useShow()// 功能二const { fontColor, changeRed, changeBlue } = useColor()return { showDivFlag, show, hide, fontColor, changeRed, changeBlue }}
}
</script>

选项式API的精妙之处:分散定义,组合使用

小结

由于vue3中提供了一个新的写代码的方式(老方式也是可以使用的),为了区别vue2,给他们各自取了不同的名字:

Vue2选项式API(option api) 优点:简单,各选项各司其职;缺点:不方便功能复用;功能代码分散维护代码横跳

Vue3组合式API(composition api) 优点:功能代码组合维护, 不方便功能复用;

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

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

相关文章

leetcode 重复的子字符串

前要推理 以abababab为例&#xff0c;这里最主要的就是根据相等前后缀进行推导 s [ 0123 ] 如 t【 0123 】 f 【01 23 】 后两个分别是前后缀&#xff0c;第一个是总的字符串&#xff0c;然后可以推导 //首先还是算出…

从Spring Boot应用上下文获取Bean定义及理解其来源

前言 在Spring框架中&#xff0c;Bean是组成应用程序的核心单元。特别是在Spring Boot项目中&#xff0c;通过使用SpringApplication.run()方法启动应用后&#xff0c;我们可以获得一个ConfigurableApplicationContext实例&#xff0c;这个实例代表了整个应用程序的运行时环境…

ArcgisForJS如何使用ArcGIS Server发布的GP服务?

文章目录 0.引言1.ArcGIS创建GP服务2.ArcGIS Server发布GP服务3.ArcgisForJS使用ArcGIS Server发布的GP服务 0.引言 ArcGIS for JavaScript&#xff08;或简称AGJS&#xff09;是一个强大的工具&#xff0c;它允许开发者使用JavaScript在Web浏览器中创建和运行ArcGIS应用程序。…

Oracle 数据泵 导入导出 最简说明

数据泵可以对含有CLOB&#xff0c;BLOB等字段的表导出数据&#xff0c;是应用场景最广的一种导入导出方法&#xff0c;我觉得要比SQL Developer好用&#xff0c;不过需要能够登录数据库所在主机的操作系统。 导出 expdp paasapp/Paas1015 datafilemy_data.dmp content{ALL|DATA…

linux 的各种压缩文件命令

01-.tar格式 解包&#xff1a;[&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;]$ tar xvf FileName.tar 打包&#xff1a;[&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;]$ tar cvf FileN…

❤ git操作Github、git操作github

❤ 操作github 一、git操作Github 1、设置用户名和邮件地址 git config --global user.name "nexuslin" git config --global user.email "2455067339qq.com"2、生成本地密钥 ssh-keygen -t rsa -C 2455067339qq.com3、接下来就一直回车&#xff0c;然…

被后端五万条数据爆破我是怎么处理的

前言 今天面试的时候面试官直接问了一句后端一次性返回10万条数据给你&#xff0c;你如何处理&#xff1f;&#xff0c;我脑中浮现的第一句话就是拿着物理学圣剑找后端进行 “友好的协商”&#xff0c;谁打赢了听谁的。不过虽然这种情况很少&#xff0c;不过我在实际开发中还真…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos&#xff0c;具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact&#xff08;文件为…

(转载)SpringCloud 微服务(三)-Seata解决分布式事务问题

ps:这个原文写的很好&#xff0c;怕后续这个地址失效&#xff0c;备份一个留着自己学习 转自&#xff1a;SpringCloud 微服务&#xff08;三&#xff09;-Seata解决分布式事务问题_seata 黑马 代码-CSDN博客 看完了黑马程序员的免费课程&#xff0c;感觉受益匪浅&#xff0c;…

【Oracle】玩转Oracle数据库(七):RMAN恢复管理器

前言 嘿&#xff0c;数据库大魔法师们&#xff01;准备好迎接新的技术大招了吗&#xff1f;今天我们要探索的是Oracle数据库中的神奇利器——RMAN恢复管理器&#xff01;&#x1f6e1;️&#x1f4be; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;七&#xff09;&#xf…

Django 表单

用Django对用户提交的表单数据进行处理&#xff08;get方式&#xff09;。 search.py 文件代码&#xff1a; from django.http import HttpResponse from django.shortcuts import render # 表单 def search_form(request): return render(request, search_form.html) # …

【4.3计算机网络】网络规划与设计

目录 1.网络规划2.逻辑网络设计3.物理网络设计 1.网络规划 需求分析->通信规范分析->逻辑网络设计->物理网络设计->实施阶段 2.逻辑网络设计 3.物理网络设计 例题1&#xff1a; 解析&#xff1a;选A。 例题2&#xff1a; 解析&#xff1a;选A。 例题3. 解析&am…

自动化威胁检测和响应

网络安全变得比以往任何时候都更加复杂和疯狂。网络威胁在不断演变&#xff0c;资金充足且持续存在的不良行为者变得更加复杂且更难以检测。预算和资产捉襟见肘&#xff0c;现代网络安全团队的任务是通过持续监控威胁、实施强有力的安全措施、教育组织最佳安全实践以及迅速修复…

关于uniapp小程序的分包问题

开发uniapp小程序时&#xff0c;在打包上传代码时会出现超出2M的打包限制不能上传&#xff0c;那么我们该怎么做呢&#xff1f; 1.对于图片&#xff0c;将图片从后端服务取&#xff0c;尽量不要放在静态资源&#xff0c;图片体积会影响打包大小。 2.使用分包&#xff0c;tabb…

transformers生成式对话机器人

生成式对话机器人是一种人工智能技术,它通过学习大量自然语言数据,模拟人类进行开放、连贯和创造性的对话。这种类型的对话系统并不局限于预定义的回答集,而是能够根据上下文动态生成新的回复内容。其核心组件和技术包括: 1、神经网络架构:现代生成式对话机器人通常基于深…

Hudi配置参数优化

1&#xff09;Commits&#xff1a;表示一批记录原子性的写入到一张表中。 2&#xff09;Cleans:清除表中不再需要的旧版本文件。 3&#xff09;Delta_commit:增量提交指的是将一批记录原子地写入MergeOnRead类型表&#xff0c;其中一些/所有数据都可以写入增量日志。 4&…

【解决】Vue3中使用element-plus菜单点击两次才高亮显示问题

【解决】Vue3中使用element-plus菜单点击两次才高亮显示问题 原因&#xff1a;我这里造成高亮点击两次才生效的原因是重复渲染造成default-active的值重置了。 状况&#xff1a;点击菜单后&#xff0c;地址栏改变、页面也跳转&#xff0c;但要点击第二次后才高亮显示。或者点击…

DEEPSORT算法:深度学习驱动下的高效多目标跟踪

DEEPSORT算法核心原理梗概 DEEPSORT&#xff08;Deep Simple Online and Realtime Tracking&#xff09;是一种基于深度学习的多目标跟踪算法。其核心原理在于利用深度学习模型进行目标检测&#xff0c;并结合卡尔曼滤波器进行目标状态预测和数据关联&#xff0c;从而实现目标…

Python:内存监测工具memory_profiler

Python内存监测工具memory_profiler memory_profiler 是一个用于监测Python代码内存使用的工具。它可以帮助开发者理解他们的程序在运行时消耗内存的情况&#xff0c;确定内存泄漏的位置&#xff0c;优化代码性能。 安装 由于memory_profiler不是Python的标准库&#xff0c;…

全国产飞腾E2000Q +复旦微FPGA的轨道交通、电力解决方案

产品概述 ITX-XMF201是一款高性能边缘计算网关主板&#xff0c;采用飞腾E2000Q 4核处理器&#xff0c;国产化率达到95%国产化。 板载2电口&#xff0c;2路CAN&#xff0c;6路RS232接口&#xff0c;1路RS485接口&#xff0c;16路GPIO&#xff0c;可以满足银行、轨道交通、电力等…