你了解Vue3 组合式API吗?

「Vue3系列」Vue3 组合式 API 通过模板引用,你可以在组件的 JavaScript 代码中引用模板中的特定元素或组件,从而能够直接操作它们或访问它们的属性和方法。组合式 API 的核心思想是将组件的逻辑分割成更小的函数(或称为“组合函数”),这些函数可以根据需要被引入和重用。函数是组合式 API 的核心,它提供了一个新的逻辑组织方式,允许你使用响应式状态、计算属性、方法、生命周期钩子等,而不必依赖于 Vue 组件的选项对象。函数返回一个对象,该对象中的属性将在模板中作为组件的响应式状态、方法或计算属性来使用。 阅读详情

组合式API介绍

组合式API是Vue3中引入的一种新的编程模式,它提供了一种更灵活、更高效的方式来组织和复用代码。组合式API的主要目标是解决Vue2中选项式API在处理复杂组件时可能遇到的问题,如逻辑复用和代码组织等。

Vue3引入组合式API的原因在于,随着应用程序的复杂性增加,我们可能会遇到需要在多个组件之间共享状态逻辑的情况。在Vue2中,我们通常会使用mixins来实现这一点,但这可能会导致命名冲突和来源不明的问题。组合式API通过引入setup函数,使我们能够更直观地组织和复用代码。

总得来说:组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语,涵盖了以下方面的 API:

  • **响应式 API:**例如 ref() 和 reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。
  • **生命周期钩子:**例如 onMounted() 和 onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。
  • **依赖注入:**例如 provide() 和 inject(),使我们可以在使用响应式 API 时,利用 Vue 的依赖注入系统。

组合式API与选项式API对比

与传统的选项式API相比,组合式API提供了更高的灵活性和可复用性。在选项式API中,我们需要按照data、methods、computed等选项来组织代码,这在处理简单组件时非常方便,但在处理复杂组件时,相关的逻辑可能会被分散在不同的选项中,使得代码难以维护。

相反,组合式API允许我们按照逻辑关系来组织代码,这使得代码更易于理解和维护。此外,组合式API还提供了更好的类型推断,使得我们能够更好地利用TypeScript的优势。

Composition API相比Options API具有以下优势:

  • **更好的代码组织:**Composition API允许我们将逻辑相关的代码组织在一起,使得代码更加可读、可维护。
  • **更好的复用性:**通过自定义组合函数,我们可以将逻辑进行封装,使其在不同组件之间进行复用。
  • **更好的类型推断:**Composition API使用了TypeScript的方式来定义函数签名,可以提供更好的类型推断和编码支持。
  • **更小的生产包体积:**搭配 <script setup> 使用组合式 API 比等价情况下的选项式 API 更高效,对代码压缩也更友好。
  • **更好的响应性:**Composition API提供了更细粒度的响应性跟踪,可以更好地控制组件的更新和渲染。

观察下面两张动图,直观的感受组合式API与选项式API的最大的区别;

在这里插入图片描述

在这里插入图片描述

组合式API使用举例

让我们通过一个简单的例子来看看如何使用组合式API。假设我们正在构建一个计数器应用,我们可以使用ref函数来创建一个响应式的计数器:

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)

    function changeCount() {
      count.value++
    }

    return {
      count,
      increment
    }
  }
}

在这个例子中,我们首先导入了ref函数,然后在setup函数中使用它来创建一个响应式的计数器。我们还定义了一个increment函数来增加计数器的值。最后,我们返回了count和increment,使得它们可以在模板中使用。

响应式数据

在Vue中,响应式数据是一种可以自动更新UI的数据。Vue3提供了两种创建响应式数据的方法:ref和reactive。

ref函数可以创建一个响应式的数据对象,这个对象有一个value属性,我们可以通过这个属性来获取或设置它的值。reactive函数则可以创建一个响应式的对象,我们可以直接访问或修改这个对象的属性。

监听器和计算属性

在Vue中,我们可以使用监听器来响应数据的变化。监听器是一种特殊的计算属性,它会在依赖的数据变化时执行一段代码。我们可以使用watch函数来创建一个监听器。

<script setup lang="ts">
import { watch, ref } from 'vue';

const count = ref(0);
const changeCount = () => {
    count.value++;
}
// 监听count,计算count的2倍的值,count变化,也自动触发doubleCount值的变化
const doubleCount = ref(0);
watch(() => count, () => {
    doubleCount.value = count.value * 2;
});
</script>

计算属性是一种基于其他数据自动计算的数据。我们可以使用computed函数来创建一个计算属性。与监听器不同,计算属性不会执行任何副作用,它只是根据依赖的数据计算一个新的值。

<script setup lang="ts">
import { reactive, computed } from 'vue';
interface Name {
    firstName: string
    lastName: string
}

const person: Name = reactive({
    firstName: 'zhang',
    lastName: 'san'
})
// personName 由firstName和lastName计算得来
const personName = computed(() => {
    return person.firstName + " " + person.lastName;
})
</script>

自定义复用逻辑

组合式API提供了一种简单的方式来自定义复用逻辑。我们可以将复杂的逻辑封装成一个函数,然后在多个组件中复用这个函数。这个函数可以返回一些响应式的数据,方法,或者其他的组合函数。

如上一节中的counter,我们定义成如下计算逻辑:

// counter.ts
import { ref, watch } from 'vue'

const count = ref(0);
const changeCount = () => {
    count.value++;
}
const doubleCount = ref(0);
watch(() => count, () => {
    doubleCount.value = count.value * 2;
});

export function useCounter() {
    return {
        count,
        changeCount,
        doubleCount
    }
} 

// MyComponent.vue
<script setup lang="ts">
import { useCounter } from '../counter';

const { count, changeCount, doubleCount } = useCounter();

</script>
<template>
    <button @click="changeCount">count:{{ count }}</button>
    <p />
    <span>doubleCount:{{ doubleCount }}</span>
</template>

上面代码定义了一个自定义复用逻辑useCounter,在VUE直接导入使用,代码可读性增强,逻辑更加聚合,代码更易维护。

官方约定,自定义复用逻辑组合函数的命名都以use开头。

生命周期钩子函数

在Vue3中,生命周期钩子函数的使用方式有所变化。我们可以在setup函数中直接使用它们,而不需要将它们放在created、mounted等选项中。这使得我们能够更直观地看到组件的生命周期。

主要有以下钩子函数:

  • onBeforeMount(): 在组件被挂载之前调用,此时组件已经完成了响应式状态的设置,但还没有创建 DOM 节点。
  • onMounted(): 在组件被挂载之后调用,此时组件已经创建了 DOM 节点,并插入了父容器中。可以在这个钩子中访问或操作 DOM 元素。
  • onBeforeUpdate(): 在组件即将因为响应式状态变更而更新其 DOM 树之前调用,可以在这个钩子中访问更新前的 DOM 状态。
  • onUpdated(): 在组件因为响应式状态变更而更新其 DOM 树之后调用,可以在这个钩子中访问更新后的 DOM 状态。
  • onBeforeUnmount(): 在组件实例被卸载之前调用,此时组件实例依然还保有全部的功能。
  • onUnmounted(): 在组件实例被卸载之后调用,此时组件实例已经失去了全部的功能。可以在这个钩子中清理一些副作用,如计时器、事件监听器等。
  • onErrorCaptured(): 在捕获了后代组件传递的错误时调用,可以在这个钩子中处理错误或阻止错误继续向上传递。
  • onRenderTracked(): 在组件渲染过程中追踪到响应式依赖时调用,仅在开发模式下可用,用于调试响应式系统。

代码示例:

<script setup lang="ts">
import { onMounted } from 'vue';

onMounted(() => {
    console.log("onMounted")
})
</script>

其他

对于Vue2的用户来说,迁移到Vue3可能需要一些时间来适应新的API。但是,一旦你熟悉了组合式API,你会发现它提供了一种更直观、更灵活的方式来组织和复用代码。

在Vue3中,响应式数据的实现原理是使用了ES6的Proxy和Reflect。这使得Vue3能够更精确地追踪依赖,从而提高性能。

关于 OpenTiny

OpenTiny 是一套华为云出品的企业级组件库解决方案,适配 PC 端 / 移动端等多端,涵盖 Vue2 / Vue3 / Angular 多技术栈,拥有主题配置系统 / 中后台模板 / CLI 命令行等效率提升工具,可帮助开发者高效开发 Web 应用。

核心亮点:

  1. 跨端跨框架:使用 Renderless 无渲染组件设计架构,实现了一套代码同时支持 Vue2 / Vue3,PC / Mobile 端,并支持函数级别的逻辑定制和全模板替换,灵活性好、二次开发能力强。
  2. 组件丰富:PC 端有80+组件,移动端有30+组件,包含高频组件 Table、Tree、Select 等,内置虚拟滚动,保证大数据场景下的流畅体验,除了业界常见组件之外,我们还提供了一些独有的特色组件,如:Split 面板分割器、IpAddress IP地址输入框、Calendar 日历、Crop 图片裁切等
  3. 配置式组件:组件支持模板式和配置式两种使用方式,适合低代码平台,目前团队已经将 OpenTiny 集成到内部的低代码平台,针对低码平台做了大量优化
  4. 周边生态齐全:提供了基于 Angular + TypeScript 的 TinyNG 组件库,提供包含 10+ 实用功能、20+ 典型页面的 TinyPro 中后台模板,提供覆盖前端开发全流程的 TinyCLI 工程化工具,提供强大的在线主题配置平台 TinyTheme

联系我们:

从零构建OpenBMC风扇控制:基于phosphor-pid-control的实战配置指南 本文详细介绍了如何从零开始构建OpenBMC风扇控制系统,基于phosphor-pid-control框架实现风扇自动调速。通过解析PID算法配置、传感器定义及控制区域设置,提供工业级散热解决方案,帮助开发者优化服务器能效与可靠性。 阅读详情

相关推荐

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求...

2501_91048859的博客 3098

Vue3入门

Vue3带来的新变化 性能提升 首次渲染更快 diff算法更快 内存占用更少 打包体积变小 更好的Typescript支持 Composition API (重点) 在使用vue2.x版本开发较复杂的组件时,逻辑难以复用,组合式api的出现可以解决此类问题 3. 破坏性语法更新 vue3.0对于2.0版本的大部分语法都是可以兼容的,但是也有一些破坏性的语法更新,这个大家要格外注意 实例方法$on移除 (eventBus现有实现模式不再支持 可以使用三方插件替代) 过滤器filter

weixin_49405038的博客 1170

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

vue3-组合式API

vue3-组合式API

唯见青山不见君 2262

警惕!数字签名伪造的攻防演练:用SigThief克隆证书的真实测试(Windows环境)

本文深入探讨了Windows环境下数字签名伪造的攻防技术,详细介绍了使用SigThief工具进行签名提取与克隆的实战步骤。通过真实测试案例,揭示了数字签名安全机制的潜在漏洞,并提供了有效的防御策略和检测技术,帮助安全人员提升系统防护能力。

weixin_42530732的博客 408

三. zemax光学设计流程+案例

文章目录zemax 基本操作:1. 建立光学基本模型2. 像质评价3. 优化(重点)4. 公差分析简单镜头设计 zemax 基本操作: 1. 建立光学基本模型 2. 像质评价 3. 优化(重点) 对系统设定的约束条件或目标值 统称为操作数。 操作数: 光学特性参数(焦距EFFL,近轴放大率PMAG,入瞳位置EMPP) 像差参数(球差SPHA,彗差COMA,像散ASTI) 边界条件(中心厚度值CTVA,边缘厚度值ETAV) 优化的主要步骤: 设置评价函数和优化操作数 一般小像差系统采用波像差 构建

Taiiiii的博客 8054

vue3组合式API

# 第一天

weixin_45090657的博客 1797

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

vue3组合式api

一、 Composition API的简单介绍 Composition API也叫组合式API,是Vue3.x的新特性。 通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和灵活性方面走得更远。然而,我们的经验已经证明,光靠这一点可能是不够的,尤其是当你的应用程序变得非常大的时候——想想几百个组件。在处理如此大的应用程序时,共享和重用代码变得尤为重要。 通俗的讲: 没有Composition API之前vue相关业务的代码需要配置到op

weixin_52137798的博客 4473

[PCIe5.0] 3.4.1 Flow Control Initialization State Machine Rules

流控初始化是PCIe链路中每个虚拟通道(VC)启用的必经流程,分为FC_INIT1和FC_INIT2两个阶段,确保发送端与接收端的缓冲区信用值协商一致。

系统固件工程师 139

Leads、SDR、MQL、SQL、L2C术语概念,线索创建与清洗、线索分级模型、线索流转策略、线索的统计与分析

CRM中的“Leads”是什么?笔者在文中不仅较为全面地介绍了相关术语概念,还分析了线索的创建与清洗、线索的分级模型、线索流转策略以及线索的统计与分析。

盼盼学士 5960

你了解Vue3组合式API吗?

VUE3组合式API组合式API介绍组合式API是Vue3中引入的一种新的编程模式,它提供了一种更灵活、更高效的方式来组织和复用代码。组合式API的主要目标是解决Vue2中选项式API在处理复杂组件时可能遇到的问题,如逻辑复用和代码组织等。Vue3引入组合式API的原因在于,随着应用程序的复杂性增加,我们可能会遇到需要在多个组件之间共享状态逻辑的情况。在Vue2中,我们通常会使用mixins来实现...

zz_jesse的博客 289

无线通信技术及其在机器人中的应用

本文系统阐述了无线通信技术在机器人领域的应用框架与技术选型。首先构建了无线通信的三层理论架构:物理层解决信号传输问题,链路层处理接入控制,网络层实现组网管理。随后详细分析了主流无线技术的特性与适用场景:BLE适用于低功耗传感器节点,Wi-Fi适合高带宽视频传输,5G专网满足工业AGV的广域覆盖需求,星闪技术凭借20μs超低时延和4096台并发连接能力,为高端机器人应用提供突破性解决方案。通过鄂尔多斯隆基5G专网等典型案例,验证了5G在工业AGV规模化部署中的优势,并展望了通感算智融合、星闪+5G协同等未来发

weiyvyy的博客 1114

带你了解vue3组合式api基本写法

vue3基本写法

weixin_44161385的博客 3736

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

带你了解Vue2和Vue3区别(三)——Vue3的组合式API

组合式 API (Composition API) 是一系列 API 的集合,是函数的形式书写Vue组件。包括setup(),响应式API,生命周期钩子,依赖注入。

weixin_65908792的博客 1214

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【前端学习笔记】Vue3

在 Vue 3 中,组件可以同时接受多个 v-model,而不仅仅是 value。这意味着你可以为多个 prop 和事件使用不同的 v-model,而不需要再依赖默认的 value 和 input 事件。这对于那些需要多个双向绑定的组件非常有用。

qq_46056318的博客 1437

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

vue保姆级教程----深入了解 Vue3与Vue2的区别对比

Vue作为当下最热门的前端框架之一,经历过从Vue 1.x到2.x的迭代更新,在2020年9月正式发布了Vue 3的正式版本。Vue3在性能优化、新增特性等各个方面进行了全面的改进。那么Vue3与Vue2在语法和功能上又有哪些区别呢?本文将全面对比两者的不同之处,帮助大家更好地从Vue2迁移到Vue3。通过上文的对比,我们可以看出Vue3在编译优化、组合式API等方面进行了较大的改进,为开发者提供了更好的性能和更灵活的功能。一些API调用和语法也进行了调整,更贴合实际使用需求。

爱蹦跶的全栈大A阿 1260

【面试题】1383- 面试官问:Vue3 对比 Vue2 有哪些变化?

前言希望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3。除此之外,也希望路过的朋友可以帮助我查漏补缺????。内容混杂用法 + 原理 + 使用小心得,建议收藏,慢慢看。区别生命周期的变化整体来看,变化不大,只是名字大部分需要 + on,功能上类似。使用上 Vue3 组合式 API 需要先引入;Vue2 选项 API 则可直接调用,如下所示。//vue...

pingan8787 1592

25.vue3学习篇-生命周期和新特性

Vue 3 允许开发者创建自定义渲染器,以适应不同的平台和环境。这使得 Vue 可以在更多的场景下使用,例如原生移动应用开发、服务器端渲染等。

qq_34334992的博客 2586

vue3-01

Vue是一套用于构建用户界面的渐进式JavaScript框架,它的核心目标是让前端开发变得更加简单、高效和可维护。vue官方文档数据驱动视图:这是Vue最根本的理念。我们不再需要直接操作DOM,只需要关心数据本身。当数据发生变化时,Vue会自动、高效地更新到对应的视图中。这极大地简化了代码逻辑,让开发者可以更专注于业务本身。组件化:Vue允许我们将页面拆分成一个个独立、可复用的组件。每个组件都有自己的视图、逻辑和样式。这种‘分而治之’的思想使得大型应用的开发、测试和维护变得非常清晰和高效。声明式编程。

weixin_42960025的博客 759

vue3 语法速览

到底什么写法才是对的??vue3语法速览!不再被网上组合式API和响应式API混杂的vue攻略弄混头脑

wsnd123321的博客 208

vue2生命周期的作用,vue2和vue3的区别。

vue2和vue3周期

qq_59208151的博客 342

Vue.js 3.0的变化

keep-alive组件如果使用KeppAlive缓存组件,无论如何加载组件,都会触发。

qq_36828822的博客 367

vue3学习笔记-根据vue2与vue3的区别(持续补充)

Vue3和Vue2对比: 性能提升:Vue3这个框架将Vue全部重构了。新的框架。底层采用TS来进行重构,性能提升能达到100% 对TS的支持,Vue3底层默认采用TS进行开发。我们Vue开发过程中,一般也会默认结合TS来使用 Vue3目前创建项目采用了新的打包工具,vite工具(xxx)团队他们自己发布的一个打包。目标干掉webpack 新增了组合式api和响应式api进行开发(hook编程) vue3优势: 更快:vue3重写了虚拟dom。提升提升很多 更小:新增了tree shaking技术,你

wzy_PROTEIN的博客 484

Vue 3 入门:基础知识与新特性

Vue 3 带来了许多激动人心的新特性和改进,使得它成为构建现代 Web 应用程序的强大工具。无论你是 Vue 的新手还是有经验的开发者,都可以从 Vue 3 的新特性中受益。通过学习和实践这些新特性,你将能够创建更快、更可靠、更易维护的 Web 应用程序。

andy_68147772的博客 564

Vue3 新特性

Vue3 新特性

qq_36757628的博客 829
上一篇: 搭建 OpenTiny 组件库的 Playground 指导手册
下一篇: 活动回顾|OpenTiny:跨框架前端组件库的技术实现和实践(内含ppt课件)
OpenTiny社区
博客等级 码龄4年 1540粉丝 266原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值