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.hqwc.cn/news/497125.html

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

相关文章

java高并发场景面试题,干货来袭

为什么阿里巴巴的持久层抛弃hibernate&#xff0c;采用MyBatis框架&#xff1f; 原因大概有以下4点&#xff1a; 尤其是需要处理大量数据或者大并发情况的网站服务&#xff0c;这也阿里选择MyBatis的原因。 MyBatis整体架构 不多讲&#xff0c;先看目录图 MyBatis源码笔记文档…

黑马设计模式笔记(一)

1,设计模式概述 1.1软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 克里斯托夫亚历山大&#xff08;Christopher Alexander)在他的著作《建筑模式…

第N3周:Pytorch文本分类入门

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** import torch import…

等保2.0高风险项全解析:判定标准与应对方法

引言 所谓高风险项&#xff0c;就是等保测评时可以一票否决的整改项&#xff0c;如果不改&#xff0c;无论你多少分都会被定为不合格。全文共58页&#xff0c;写得比较细了&#xff0c;但是想到大家基本不会有耐心去仔细看的&#xff08;凭直觉&#xff09;。这几天挑里边相对…

vue -- watermark水印添加方法

前言 项目生成公司水印是很普遍的需求&#xff0c;下面是vue项目生产水印的方法。话不多说&#xff0c;复制粘贴就可以马上解决你的需求。 步骤1 创建watermark.js文件。目录结构 /** 水印添加方法 */let setWatermark (str1, str2) > {let id 1.23452384164.1234124…

【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

Spring的定时任务不生效、不触发,一些可能的原因,和具体的解决方法。

1 . 未在启动类上加 EnableScheduling 注解 原因&#xff1a;未在Spring Boot应用主类上添加EnableScheduling注解或未在XML配置文件中配置定时任务的启用。解决方法&#xff1a;确保在应用的配置类上添加EnableScheduling注解&#xff0c;启用定时任务。 2 . cron 表达式书写…

Stable Diffusion 3内测申请~~~快冲鸭~~~~~

Stability AI 将其更改为 Stable Diffusion 3。VentureBeat 报道称&#xff0c;Stability AI 的下一代旗舰 AI 图像生成模型将使用类似于 OpenAI 的 Sora 的扩散变压器框架。其当前模型仅依赖于扩散架构。虽然尚未发布&#xff0c;但您可以在等候名单中注册。 以下内容机翻&am…

基于MQTT协议实现微服务架构事件总线

一、场景描述 昨天在博客《客户端订阅服务端事件的实现方法》中提出了利用websocket、服务端EventEmitter和客户端mitt实现客户端订阅服务端事件&#xff0c;大大简化了客户端对服务端数据实时响应的逻辑。上述方案适用于单服务节点的情形。 对于由服务集群支撑的微服务架构&…

【数据结构与算法】回溯法解题20240229

【数据结构与算法】回溯法解题20240229 一、46. 全排列1、以[1,2,3]为例&#xff0c;抽象成树形结构2、回溯三部曲 二、LCR 084. 全排列 II1、以[1,1,2]为例&#xff0c;抽象成树形结构 三、面试题 08.07. 无重复字符串的排列组合四、面试题 08.08. 有重复字符串的排列组合 一、…

Oracle 直接路径插入(Direct-Path Insert)

直接路径插入&#xff08;Direct Path Insert&#xff09;是Oracle一种数据加载提速技术&#xff0c;可以在使用insert语句或SQL*Loader工具大批量加载数据时使用。直接路径插入处理策略与普通insert语句完全不同&#xff0c;Oracle会通过牺牲空间&#xff0c;安全性&#xff0…

LeetCode19. 删除链表的倒数第 N 个结点(C++)

LeetCode19. 删除链表的倒数第 N 个结点 题目链接代码 题目链接 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/ 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : …