Vue3 组合式函数Composables

简介 

        “组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数。

        我们可以把一些可以复用的逻辑封装成组合式函数放到js文件中,在vue文件中通过import来使用这些逻辑,使vue文件更瘦,逻辑更清晰。

        一个小栗子,通过计数器改变x、y的值,并使用组合式函数处理add的过程,代码如下:

import { toValue } from 'vue'// x、y为ref响应式的number类型
export function useAdd(x, y) {let xVal = toValue(x)let yVal = toValue(y)let num = xVal + yValreturn num;
}
<template><div class="box"><div class="row"><div class="intro">x = {{ x }}</div><el-input-number style="height: 44px; margin-top: 10px;" v-model="x" @change="handleChange" :min="0" :max="100" label="描述文字"></el-input-number></div><div class="row"><div class="intro">y = {{ y }}</div><el-input-number style="height: 44px; margin-top: 10px;" v-model="y" @change="handleChange" :min="0" :max="100" label="描述文字"></el-input-number></div><div class="row"><div class="intro">add = {{ addResult }}</div></div></div>
</template>
<script setup>
import { ref } from 'vue'
import { useAdd } from './utils/add'const x = ref(0);
const y = ref(0);
const addResult = ref(0);
const handleChange = () => {addResult.value = useAdd(x, y)
}
</script>
<style scoped lang="less">
.box {display: flex;flex-direction: column;margin: 20px;padding: 10px;background-color: antiquewhite;.row {display: flex;flex-direction: row;.intro {margin-right: 30px;padding-left: 30px;padding-right: 30px;background-color: bisque;}}
}
</style>

        在js文件中可以引入vue的模块,在处理ref或者reactive响应式数据时,我们这里是用了vue中的toValue做了处理。

优势

        以下内容摘抄自vue的官方文档

和 Mixin 的对比​

Vue 2 的用户可能会对 mixins 选项比较熟悉。它也让我们能够把组件逻辑提取到可复用的单元里。然而 mixins 有三个主要的短板:

  1. 不清晰的数据来源:当使用了多个 mixin 时,实例上的数据属性来自哪个 mixin 变得不清晰,这使追溯实现和理解组件行为变得困难。这也是我们推荐在组合式函数中使用 ref + 解构模式的理由:让属性的来源在消费组件时一目了然。

  2. 命名空间冲突:多个来自不同作者的 mixin 可能会注册相同的属性名,造成命名冲突。若使用组合式函数,你可以通过在解构变量时对变量进行重命名来避免相同的键名。

  3. 隐式的跨 mixin 交流:多个 mixin 需要依赖共享的属性名来进行相互作用,这使得它们隐性地耦合在一起。而一个组合式函数的返回值可以作为另一个组合式函数的参数被传入,像普通函数那样。

基于上述理由,我们不再推荐在 Vue 3 中继续使用 mixin。保留该功能只是为了项目迁移的需求和照顾熟悉它的用户。

和无渲染组件的对比​

        在组件插槽一章中,我们讨论过了基于作用域插槽的无渲染组件我们甚至用它实现了一样的鼠标追踪器示例。

        组合式函数相对于无渲染组件的主要优势是:组合式函数不会产生额外的组件实例开销。当在整个应用中使用时,由无渲染组件产生的额外组件实例会带来无法忽视的性能开销。

        我们推荐在纯逻辑复用时使用组合式函数,在需要同时复用逻辑和视图布局时使用无渲染组件。

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

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

相关文章

.[nicetomeetyou@onionmail.org].faust勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 在数字化日益普及的今天&#xff0c;网络安全问题已成为人们不可忽视的挑战。其中&#xff0c;勒索病毒作为一种极具破坏性的恶意软件&#xff0c;已多次在全球范围内制造了重大危机。其中&#xff0c;名为.[nicetomeetyouonionmail.org].faust、[support202…

Sora可能会改变我们的思维方式

当经济学家评估生成式人工智能对人类工作的影响时&#xff0c;教育家也有自己的担忧&#xff0c;毕竟在写作、答疑等领域&#xff0c;AI所展现的能力已经令许多人类望尘莫及&#xff0c;学者们可能有这样的思考&#xff1a;散文是否会继续主导人类的交流和论证。 社交媒体和新闻…

基于Scala开发Spark ML的ALS推荐模型实战

推荐系统&#xff0c;广泛应用到电商&#xff0c;营销行业。本文通过Scala&#xff0c;开发Spark ML的ALS算法训练推荐模型&#xff0c;用于电影评分预测推荐。 算法简介 ALS算法是Spark ML中实现协同过滤的矩阵分解方法。 ALS&#xff0c;即交替最小二乘法&#xff08;Alte…

2024年最新github之Go语言开源项目top50排行榜项目

如果有帮助到您还请动动手帮忙点赞&#xff0c;关注&#xff0c;评论转发&#xff0c;感谢啦&#xff01;&#x1f495;&#x1f495;&#x1f495;&#x1f618;&#x1f618;&#x1f618; 本文由Butterfly一键发布工具发布 2024年最新github之Go语言开源项目top50排行榜项目…

4.2 JavaWeb Day05分层解耦

三层架构功能 controller层接收请求&#xff0c;响应数据&#xff0c;层内调用了service层的方法&#xff0c;service层仅负责业务逻辑处理&#xff0c;其中要获取数据&#xff0c;就要去调用dao层&#xff0c;由dao层进行数据访问操作去查询数据&#xff08;进行增删改查&…

Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。

Java泛型&#xff08;Generics&#xff09;的主要用途是提供一种编写可重用且类型安全的代码的方法。它们允许在编程时使用类型参数&#xff0c;这些类型参数可以在运行时被具体的类或接口替换。泛型的主要优点包括&#xff1a; 类型安全&#xff1a;泛型编译时会进行类型检查…

如何通过docker安装seata

在现代分布式系统中&#xff0c;保证数据一致性和事务的原子性是非常重要的。Seata 是一种开源的分布式事务解决方案&#xff0c;为分布式系统中的事务管理提供了可靠的支持。通过 Docker&#xff0c;我们可以轻松地部署和管理 Seata&#xff0c;从而简化了部署流程。本篇博客将…

new mars3d.layer.HeatLayer({实现动态修改热力图半径

1.使用热力图插件的时候&#xff0c;实现动态修改热力图效果半径 2.直接修改是不可以的&#xff0c;因为这个是热力图本身的参数。 因此我们需要拿到这个热力图对象之后&#xff0c;参考api文档&#xff0c;对整个 heatLayer.heatStyle进行传参修改。 heatStyle地址&#x…

HarmonyOS 应用开发之featureAbility接口切换particleAbility接口切换

featureAbility接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口getWant(callback: AsyncCallback<Want>): void; getWant(): Promise<Want>;ohos.app.ability.UIAbility.d.tslaunchWant: Want;startAbility(parameter: StartAbilityParameter, c…

redis学习-缓存穿透、缓存击穿、缓存雪崩

1.缓存穿透 大量查询数据库中没有的数据。 当用户在redis缓存中查询不到想要的信息时&#xff0c;会进入数据库中查询&#xff0c;此时如果同一时间有大量用户从redis中查询不到信息&#xff0c;就都会去数据库中查询&#xff0c;此时数据库就可能会因为压力过大而停止服务&…

【MySQL系列】使用 ALTER TABLE 语句修改表结构的方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

智慧驿站式的“智慧公厕”,给城市新基建带来新变化

随着智慧城市建设的推进&#xff0c;智慧驿站作为一种多功能城市部件&#xff0c;正逐渐在城市中崭露头角。这些智慧驿站集合了智慧公厕的管理功能&#xff0c;为城市的新基建带来了全新的变革。本文以智慧驿站智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案…

Swagger使用配置笔记

Swagger使用配置笔记 简介 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作接口的文档在线自动生成&#xff0…

FreeRTOS--3

1.总结任务调度算法之间的区别&#xff0c;重新实现一遍任务调度算法的代码。 一&#xff0c;抢占式调度&#xff1a;高优先级的任务可以打断低优先级任务的执行。 抢占式调度适用于任务优先级不同的任务。使用默认的任务去创建一个优先级比他高的任务&#xff0c;观察抢占式调…

免试生常问的一些问题汇总---专升本学习篇

1.你怎么理解你申请的专业? 答:软件工程室一门涉及软件开发、维护和管理的工程学科。它结合了计算机科学、工程学和管理科学的原理,皆在通过系统化、规范化的方法来开发高质量的软件系统。 1.技术和支持 :软件工程包括编程语言、算法、数据结构、软件设计模式、软件测试、…

HTML基础:脚本 script 标签

你好&#xff0c;我是云桃桃。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础题”可得到前端基础100题汇…

CSS(二)---【常见属性、复合属性使用】

零.前言 本篇文章主要阐述CSS常见属性、复合属性&#xff0c;更多前置知识请见作者其它文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 1.CSS属性 CSS的属性有上百个&#xff0c;但是我们并不需要全部学习&#xff0c;只要我们学习一部分…

MuJoCo 入门教程(一)

系列文章目录 前言 一、简介 MuJoCo 是多关节接触动力学&#xff08;Multi-Joint dynamics with Contact&#xff09;的缩写。它是一个通用物理引擎&#xff0c;旨在促进机器人、生物力学、图形和动画、机器学习以及其他需要快速、准确地仿真铰接结构与环境交互的领域的研究和开…

数据结构(初阶)第二节:顺序表

从本文正式进入对数据结构的讲解&#xff0c;开始前友友们要有C语言的基础&#xff0c;熟练掌握动态内存管理、结构体、指针等章节&#xff0c;方便后续的学习。 顺序表&#xff08;Sequence List&#xff09; 线性表的概念&#xff1a;线性表&#xff08;linear list&#xff…