【Vue】Vue(九)OptionsAPI与CompositionAPI的区别

文章目录

  • OptionsAPI与CompositionAPI在代码使用和逻辑上的区别
    • 一、代码使用方面的区别
      • (一)组件定义的结构
      • (二)响应式数据的定义与使用
      • (三)逻辑复用的实现方式
    • 二、逻辑方面的区别
      • (一)逻辑内聚性
      • (二)对Type - Script的支持逻辑

OptionsAPI与CompositionAPI在代码使用和逻辑上的区别

一、代码使用方面的区别

(一)组件定义的结构

  • OptionsAPI
    • 以对象字面量的形式定义组件,对象包含多个属性,每个属性对应不同的功能。例如:
    export default {data() {return {message: 'Hello, OptionsAPI'};},methods: {sayHello() {console.log(this.message);}},mounted() {this.sayHello();}
    };
    
    • 这里datamethodsmounted等属性分别定义了组件的数据、方法和生命周期钩子等内容,它们在一个大的对象结构下相互独立存在。
  • CompositionAPI
    • 使用setup函数作为组件逻辑的入口点,在函数内部定义各种逻辑并返回供模板使用的值。例如:
    import { ref } from 'vue';export default {setup() {const message = ref('Hello, CompositionAPI');const sayHello = () => {console.log(message.value);};sayHello();return {message,sayHello};}
    };
    
    • setup函数中,将响应式数据(如ref创建的数据)、方法等逻辑紧凑地组合在一起,然后通过返回值将需要在模板中使用的数据和方法暴露出去。

(二)响应式数据的定义与使用

  • OptionsAPI
    • data函数中定义响应式数据。例如:
    export default {data() {return {count: 0};},methods: {increment() {this.count++;}}
    };
    
    • 响应式数据通过this关键字在methodswatch等其他属性中访问和修改。这里的this指向组件实例,这种方式在多层嵌套函数或回调函数中使用时可能会出现this指向混淆的问题。
  • CompositionAPI
    • 使用refreactive函数来定义响应式数据。
    • 例如使用ref
    import { ref } from 'vue';
    export default {setup() {const count = ref(0);const increment = () => {count.value++;};return {count,increment};}
    };
    
    • 或者使用reactive(用于创建对象类型的响应式数据):
    import { reactive } from 'vue';
    export default {setup() {const state = reactive({count: 0});const increment = () => {state.count++;};return {state,increment};};
    };
    
    • 响应式数据通过value属性(ref类型)或者直接操作对象属性(reactive类型)来进行访问和修改,避免了this指向问题。

(三)逻辑复用的实现方式

  • OptionsAPI
    • 主要通过mixins来实现逻辑复用。例如,创建一个mixin对象:
    const myMixin = {data() {return {sharedData: 'This is shared data'};},methods: {sharedMethod() {console.log('This is a shared method');}}
    };export default {mixins: [myMixin],// 组件自身的其他逻辑data() {return {componentData: 'This is component - specific data'};},mounted() {this.sharedMethod();}
    };
    
    • 但是mixins存在一些问题,如可能导致命名冲突(如果多个mixins中有相同名称的属性或方法),并且在组件中使用时,难以追踪某个属性或方法的来源。
  • CompositionAPI
    • 通过自定义组合函数来实现逻辑复用。例如:
    import { ref } from 'vue';const useCounter = () => {const count = ref(0);const increment = () => {count.value++;};return {count,increment};
    };export default {setup() {const { count, increment } = useCounter();return {count,increment};}
    };
    
    • 自定义组合函数可以在多个组件中复用,代码结构清晰,易于理解和维护。

二、逻辑方面的区别

(一)逻辑内聚性

  • OptionsAPI
    • 相关逻辑分散在不同的选项属性中。例如,与一个数据相关的初始化逻辑可能在data中,对该数据的操作逻辑在methods中,数据变化的监听逻辑在watch中。这种分散的结构使得在处理复杂功能时,需要在多个属性之间切换来理解完整的逻辑流程。
  • CompositionAPI
    • setup函数中可以将相关逻辑组合在一起。例如,对于一个计数器功能,可以在setup函数中同时定义响应式数据、操作数据的方法以及相关的生命周期钩子(如果需要),使得整个功能的逻辑更加内聚,便于理解和维护。

(二)对Type - Script的支持逻辑

  • OptionsAPI
    • 在OptionsAPI中使用TypeScript时,需要为每个选项属性分别定义类型。例如,在data函数中定义的数据需要单独定义类型,methods中的方法也需要定义参数和返回值的类型等。这使得类型定义分散在整个组件定义中,代码结构相对复杂。
    • 如下是一个使用TypeScript的OptionsAPI示例:
    export default {data(): {message: string;} {return {message: 'Hello'};},methods: {sayHello(): void {console.log(this.message);}}
    };
    
  • CompositionAPI
    • 由于以函数形式组织逻辑,在setup函数中可以更方便地进行整体的类型定义。可以对setup函数的输入参数和返回值进行类型定义,并且在自定义组合函数中也能很好地定义类型。这种方式与TypeScript的函数类型系统结合得更加紧密,代码的类型定义更加简洁清晰。
    • 例如:
    import { ref } from 'vue';const useCounter = (): {count: { value: number };increment: () => void;
    } => {const count = ref(0);const increment = () => {count.value++;};return {count,increment};
    };export default {setup(): {count: { value: number };increment: () => void;} {const { count, increment } = useCounter();return {count,increment};}
    };
    

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

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

相关文章

光纤光学——弱导光纤与线偏振模

一、基本思想 弱导光纤:n1≈ n2 , k0n1 ≈ k0n2,亦即: k0n1 ≈ k0 n2 ≈ 光线与纤轴的夹角小;芯区对光场的限制较弱; 消逝场在包层中延伸较远。 弱导光纤场的特点: HEι1,m模式与EHι-1,m色散曲线相近…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺点:系统信…

Gin框架操作指南01:开山篇

Gin是目前最流行,性能最好的的GoWeb框架,几乎成为了学习GoWeb必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档的很多示例代码又不全&#xff…

deepin V23 部署Ollama

系统:Deepin V23 1.Ollama简单介绍 Ollama是一个开源的大语言模型本地部署工具,通过它可以方便的在本机部署开源大模型。 Ollama仓库地址:https://github.com/ollama/ollama Ollama官方下载地址:https://…

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备助力KTV视频监控建设

随着娱乐产业的蓬勃发展,KTV作为一种集唱歌、聚会、休闲于一体的娱乐场所,深受大众喜爱。然而,随着人流量的增加和夜间营业的特性,KTV的安全问题也日益凸显。在这样的背景下,NVR监测软件/设备EasyNVR的引入不仅成为了一…

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述: ①DHCP Snooping使能DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

一、下载介质 1、Oracle Instant Client Oracle Instant Client Downloads | Oracle 中国 2、PL/SQL DEVELOPER PL/SQL Developer - Allround Automations Free trial - Allround Automations 二、安装介质。 1、安装plsqldev1504x64.msi。 一路默认下一步。 选择输入许可信…

Facebook的AI驱动发展:人工智能如何改变社交体验

个性化内容推荐 Facebook利用AI算法分析用户的行为数据,包括点赞、评论、分享和浏览历史。这些数据使得平台能够深入了解用户的兴趣和偏好,从而提供个性化的内容推荐。例如,用户在浏览动态时,AI系统会根据用户的互动历史&#xf…

大学生项目竞赛:如何通过面试选拔优秀队友

大学生项目竞赛:如何通过面试选拔优秀队友 面试前的自我提问行为面试法:识别真实水平选人后的用人策略结语 作为一名积极参与各类项目竞赛的大学生,我深刻体会到团队成员的选择对于项目成功的重要性。在这篇文章中,我将分享我的一…

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

用Aconvert.com将MOBI文件转换为PDF:一步步指南

在今天的数字时代,文件格式转换是日常办公和学习中常见的需求之一。MOBI格式的电子书文件在某些设备上不太方便阅读,而PDF格式则更加通用。本文将为你详细介绍如何使用Aconvert.com将MOBI文件转换为PDF文件。 1. 访问Aconvert.com 首先,打开…

【数据库设计】逻辑结构设计

E-R实体集的转换 概念结构设计之后就是对E-R图进行逻辑结构设计:即将E-R图转化成关系的过程。逻辑结构设计主要用于数据库管理系统上,为了让数据在计算机系统中更好地表示。 此设计过程用到的数据模型有:除了前面讲过的关系模型还有层次模型…

功能驱动方法是什么?如何有效管理技术债务以避免项目风险?

在软件开发和项目管理领域,“功能驱动方法”(Feature-Driven Development, FDD)和“技术债务”(Technical Debt)是两个与项目成功紧密相关的重要概念。功能驱动方法是一种高效的敏捷开发方式,而技术债务则代…

飞腾D3000多核性能

飞腾d3000多核应该超过龙芯3a6000不小于30%,所以了肯定超过10100。d3000单核应该比海光3250强一点点,多核可能稍有不如,因为没有超线程。 3A6000单核,多核性能均明显不如飞腾D3000,兆芯KX-7000,海光3350&a…

【Kenel】基于 QEMU 的 Linux 内核编译和安装

文章目录 安装虚拟机系统共享目录编译内核卸载内核参考资料 本文主要记录个人做存储系统研究时,在 QEMU 环境下编译和安装 Linux 内核的过程 安装虚拟机系统 之前在 利用 RocksDB ZenFS 测试 ZNS 的环境搭建和使用 给出过借助 VNC 进行图形化安装的步骤&#xff…

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…

Linux系统——ssh远程连接

Linux系统——ssh远程连接 一、ssh协议介绍1、远程连接协议2、ssh服务基本操作3、ssh常用操作 二、ssh加密1、加密算法类型2、对称加密算法3、非对称加密算法 三、免密ssh的配置1、ssh认证方式2、配置免密ssh3、ssh-copy-id做了什么? 四、ssh服务配置 一、ssh协议介…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【解决proto文件生成的java 在intellij idea引用会报错】

现象 下载新项目 代码有引用proto生成的java类 会一直报红 我的idea版本2024.2.3,比较新,自动装载了插件,旧版本需要自己装 解决方式 Maven生成资源 这一步是为了先从proto生成java文件 安装这个插件 右键项目->Maven->Generated…