【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();} };- 这里
data、methods、mounted等属性分别定义了组件的数据、方法和生命周期钩子等内容,它们在一个大的对象结构下相互独立存在。
- 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关键字在methods、watch等其他属性中访问和修改。这里的this指向组件实例,这种方式在多层嵌套函数或回调函数中使用时可能会出现this指向混淆的问题。
- 在
- CompositionAPI
- 使用
ref或reactive函数来定义响应式数据。 - 例如使用
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);}} }; - 在OptionsAPI中使用TypeScript时,需要为每个选项属性分别定义类型。例如,在
- 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};} }; - 由于以函数形式组织逻辑,在
相关文章:
【Vue】Vue(九)OptionsAPI与CompositionAPI的区别
文章目录 OptionsAPI与CompositionAPI在代码使用和逻辑上的区别一、代码使用方面的区别(一)组件定义的结构(二)响应式数据的定义与使用(三)逻辑复用的实现方式 二、逻辑方面的区别(一࿰…...
MySQL 【日期】函数大全(四)
目录 1、MAKEDATE() 根据年份和一年中天数创建一个日期并返回。 2、MAKETIME() 指定的时、分、秒创建一个时间并返回。 3、MINUTE() 函数提取并返回时间的分钟部分。 4、MONTH() 函数提取日期的月份部分并作为数字返回。 5、MONTHNAME() 返回给定日期的月份的名字。 6、N…...
Jlink 直接读取单片机数据
1. 驱动版本 因人而异,这里我使用的是 “J-Flash V6.96” 本人驱动链接:夸克网盘 提取码:rgzk 2. 打开软件 3. 创建jlink工程 4. 选择芯片 此处本人使用芯片 “STM32F103VCT6” 5. 连接单片机 连接成功反馈 6. 读取单片机内部数据 …...
VScode运行C语言终端输出中文乱码问题解决方案
VScode运行C语言输出中文乱码问题解决方案 由于 VSCode 的终端是对系统的 cmd 命令行工具的调用,而 cmd 的默认编码为 GBK。当我们在 VSCode 中以 UTF-8 编码进行代码编写且代码里含有中文字符时,在终端运行代码便会出现中文乱码现象。要解决此问题&…...
Leetcode刷题. 贪心算法
贪心算法: 比较传统的解释:将整个问题拆解为几个小问题,找到小问题的最优解,加起来就是整个问题的全局最优解。对于现在的我理解贪心就是一种感觉,给出证明很难,解题思路一般就是认真读题,发掘题…...
强化学习的数学原理-01基本概念
state: T h e s t a t u s o f a g e n t w i t h r e s p e c t t o t h e e n v i r o n m e n t The \quad status \quad of \quad agent \quad with \quad respect \quad to \quad the \quad environment Thestatusofagentwithrespecttotheenvironment (agent 相对于环境的…...
D41【python 接口自动化学习】- python基础之函数
day41 函数参数传递错误 学习日期:20241018 学习目标:函数﹣-54 避坑指南:列表作为参数传递出错了怎么办? 学习笔记: 列表类型的特殊性 list1[x,y,z] tuple1(list1,b,c)# 修改元组中的列表,会…...
思迅商云8修改最大找零金额
执行如下语句前请备份数据库 -POS收银找零金额最大数 --把下面SQL中的 1000.00 改成你想要的金额数,再到查询分析器中执行: --总店 use hbposv8 go insert t_sys_system (sys_var_id, sys_var_value, sys_var_name) values (pos_max_givchg, 1000.00, 最…...
Lumerical学习——分析工具(Analysis tools)
一、分析工具和模拟环境(Analysis tools and the simulation environment) 模拟计算完成后,模拟计算数据紧接着写到模拟工程文件中;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…...
思迅商云8会员积分全部清0
请您备份数据库后执行以下语句: declare card_id varchar(20), acc_num numeric(16,4), dec_num numeric(16,4), minus_num numeric(16,4), branch_no varchar(4), count int select branch_nosys_var_value fro…...
$nextTick原理
一、什么是 $nextTick $nextTick 是 Vue 实例上的一个方法,允许我们在下次 DOM 更新循环结束后执行一个回调。这通常用于需要访问更新后的 DOM状态的场景。由于 Vue 在数据变化后并不会立即更新 DOM,而是进行异步批处理,使用 $nextTick可以保…...
python办公:批量PDF合并—通用版
目录 专栏导读1、库的介绍2、库的安装3、核心代码3、提供测试PDF生成代码5、完整代码进阶版总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一…...
人工智能研究创造出新型蛋白质
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
blender 金币基站 建模 学习笔记
一、学习blender视频教程链接 案例3:金币基站_建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?vd_sourced0ea58f1127eed138a4ba5421c577eb1&p12&spm_id_from333.788.videopod.episodes 二、金币基站建模过程 (1&#x…...
eggjs sequelize egg-sequelize-auto自动从零生成一个数据表 自动创建model
sequelize egg-sequelize-auto整个过程还是有一些坑 包括兼容性问题 依赖安装问题 需要注意 缺少一个条件 包跑不起来 或使用体验很差 1. 全局安装插件 pnpm install -g sequelize-cli sequelize mysql2 egg-sequelize-auto 2. 执行命令创建 migrate迁移文件 以及 mod…...
解决低版本pytorch和onnx组合时torch.atan2()不被onnx支持的问题
解决这个问题,最简单的当然是升级pytorch和onnx到比较高的版本,例如有人验证过的组合: pytorch2.1.1cu118, onnxruntime1.16.3 但是因为你的模型或cuda环境等约束,不能安装这么高的版本的pytorch和onnx组合时(例如我的环境是pytorch1.12&…...
javaWeb项目-ssm+jsp房屋出租管理系统功能介绍
本项目源码(点击下方链接下载):java-ssmjsp房屋出租管理系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端ÿ…...
【R语言】gadm全球行政区划数据库
我R语言不熟、也不是学GIS的。仅用于记录。 文章目录 一、gadm 数据库简介二、R 语言示例三、sf 包的函数 一、gadm 数据库简介 GADM(全称Database of Global Administrative Areas)是一个高精度的全球行政区划数据库,它包含了全球所有国家和…...
3万字66道Java基础面试题总结(2024版本)
本文合计三万字,整合了66道当前Java面试中比较热门的面试题,希望对大家有所帮助。 文章目录 一、Java概念1. JDK和JRE和JVM的区别2. Java语言有哪些特点3. 什么是字节码?采用字节码的最大好处是什么?4. Oracle JDK 和 OpenJDK 的对…...
go 环境安装
最近搭建AIGC大模型聚合平台,涉及到了go语言,随手整理一下环境安装步骤分享给大家。 1、安装 官网下载地址:https://go.dev/ 1.1 Linux 安装 yum install git -y yum install golang -y yum install gcc -y # 日志工具,如需要…...
RAGENativeUI:面向GTA模组开发的原生级界面框架架构分析
RAGENativeUI:面向GTA模组开发的原生级界面框架架构分析 【免费下载链接】RAGENativeUI 项目地址: https://gitcode.com/gh_mirrors/ra/RAGENativeUI 技术痛点深度剖析:GTA模组界面开发的现实挑战 在Grand Theft Auto V模组开发领域,…...
5分钟实现零代码GUI开发!ImStudio让Dear ImGui界面设计效率倍增
5分钟实现零代码GUI开发!ImStudio让Dear ImGui界面设计效率倍增 【免费下载链接】ImStudio GUI layout designer for Dear ImGui 项目地址: https://gitcode.com/gh_mirrors/im/ImStudio 作为开发者,你是否曾为编写GUI界面而头疼?是否…...
比迪丽LoRA部署优化:TensorRT加速后推理速度提升300%实测
比迪丽LoRA部署优化:TensorRT加速后推理速度提升300%实测 1. 引言:当二次元老婆遇上推理加速 如果你玩过AI绘画,尤其是喜欢生成《龙珠》里的角色比迪丽,那你一定知道等待图片生成时的那种心情——看着进度条一点点爬,…...
Pixel Script Temple部署教程:ARM服务器(如NVIDIA Grace)上Qwen2.5量化部署
Pixel Script Temple部署教程:ARM服务器(如NVIDIA Grace)上Qwen2.5量化部署 1. 项目概述 Pixel Script Temple是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将AI推理能力与8-Bit复古美学相结合,为创作者提供沉…...
C++技术岗面试经验总结
🎬 胖咕噜的稞达鸭:个人主页🔥 个人专栏: 《数据结构》《C初阶高阶》 《Linux系统学习》 《算法日记》⛺️技术的杠杆,撬动整个世界! 1. 右值引用和左值引用的区别 左值是我们平常使用的函数对象,表达式结束后依旧存在…...
Windows 10/11 安卓应用安装器:APK Installer 完整使用指南
Windows 10/11 安卓应用安装器:APK Installer 完整使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为无法在Windows电脑上运行安卓应用而烦恼吗…...
TCC-G15散热控制实战指南:释放Dell游戏本性能潜力
TCC-G15散热控制实战指南:释放Dell游戏本性能潜力 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 一、问题发现:游戏本散热困境的技术根…...
数字记忆守护者:WeChatMsg让微信聊天记录成为永恒的时光胶囊
数字记忆守护者:WeChatMsg让微信聊天记录成为永恒的时光胶囊 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
TranslucentTB高效配置指南:场景化方案实现Windows任务栏个性化
TranslucentTB高效配置指南:场景化方案实现Windows任务栏个性化 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 作为一款开源…...
PyTorch 2.5实战教程:10个核心API详解,轻松搭建你的第一个AI模型
PyTorch 2.5实战教程:10个核心API详解,轻松搭建你的第一个AI模型 1. 学习目标与前置准备 1.1 本教程能带给你什么 通过这篇教程,你将掌握PyTorch 2.5中最核心的10个API使用方法,并能够独立完成一个简单AI模型的搭建和训练。我们…...
