Vue3中的Composables组合式函数,Vue3实现minxins

Vue3中的Composables是什么

Vue3中的Composables 简单理解其实就是类React Hooks式的组合式函数封装方法。

Vue官方称为Composables 组合式函数。

1.抽离复用逻辑时

Vue2写法

(1)Vue2 中的mixins混入器写法缺点 (Vue3 optionsApi写法同理)

新建minxins.js文件 案例

//minxins.js 文件
export default{data(){return{message:'混入对象',name:'zhangsan000'}},methods: {logMessage() {console.log('打印message', this.message);}}
}

使用组件

// 使用
import minxins  from "./common/minxins";
import minxins1 from "./common/minxins1"; // 举例
import minxins2 from "./common/minxins2"; // 举例
export default{mixins: [minxins, minxins1, minxins2], //可混入多个文件data(){return{message:'混入对象新的',bar:'bar',}},created(){this.logMessage(); // 打印 '混入对象新的'console.log('created组件钩子被调用')}, 

一个简单Vue2 (或Vue3optionsApi写法) minxins混入器案例很直观的看出 缺点:

  1. 当使用了多个minxins时, property来自哪个 mixin变得不清晰,这使追溯实现和理解组件行为变得困难。
  2. 命名冲突会覆盖。
  3. 隐式的跨 minxin交流:多个minxin需要依赖共享的 property键名来进行相互作用,这使得它们隐性地耦合在一起。而一个组合式函数的返回值可以作为另一个组合式函数的参数被传入,像普通函数那样。

(2)Vue3 composition API写 法写 minxins 类功能

// composables\useHelloWorldData.ts
import { ref, onMounted, onUnmounted } from 'vue'export function useHelloWorldData() {let message = ref<string>('混入对象');let name = ref<string>('zhangsan000');const logMessage = (): void => {console.log(message.value);};onMounted(() => {});onUnmounted(() => {});return { message, name, logMessage }
}

使用

// template
<template><p>message</p><p>name</p>
</template>
// <script setup lang="ts">
import { onMounted } from 'vue'
import { useHelloWorldData } from '../composables/useHelloWorldData';// let message = ref<string>('混入对象新'); 异常提示 无法重新声明块范围变量“message”
const { message, name, logMessage } = useHelloWorldData();onMounted(() => {logMessage();
});// </script>

一个简单Vue3 composition API案例,写类Hooks函数(vue3成为组合式函数)实现minxin功能的 优点:

  1. 当使用了多个组合式封装的属性时,追溯来源清晰明了。
  2. 命名冲突会直接提示命名重复了的异常。
  3. 不存在 Vue2那种 隐式的跨 minxin交流,因为页面引用了重复变量直接会提示。
  4. 默认使用TS,类型推断当然存在优势。
  5. 使用函函数式编程, 函数内部的变量在打包的时候,压缩器会把函数内部的变量压成 var a,b,c,d 之类的。而对象中的属性key 值,主流打包工具压缩器没有简化对象key值名字。所以函数式编程打包包体相对会更小一些。

2. 函数式写法功能的扩展组合

既然可以按照React Hooks的类组合式函数方式去写,功能就不仅仅局限在混入器minxin功能上
官方的简单小案例 封装 useMouse 鼠标位置监听 功能

// event.ts
import { onMounted, onUnmounted } from 'vue'export function useEventListener(target, event, callback) {onMounted(() => target.addEventListener(event, callback))onUnmounted(() => target.removeEventListener(event, callback))
}
// useMouse.ts
import { ref } from 'vue'
import { useEventListener } from './event'export function useMouse() {const x = ref<number>(0);const y = ref<number>(0);useEventListener(window, 'mousemove', (event) => {x.value = event.pageXy.value = event.pageY})return { x, y }
}

使用

<script setup>
import { useMouse } from './useMouse'const { x, y } = useMouse()
</script><template>鼠标位置: {{ x }}, {{ y }}</template>

Vue3中的Composables是什么 官方文档地址: https://vuejs.org/guide/reusability/composables.html

Vue3使用类Hooks的函数式编程有什么优点 # 尤雨溪 19年的视频有说到过(22:58时间处) https://www.bilibili.com/video/BV1K4411N7u3?spm_id_from=333.999.header_right.fav_list.click&vd_source=7e59139d8d4ca4b7a100d53ee1cf711f



喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

【DataSophon】DataSophon1.2.1 ranger usersync整合

目录 一、简介 二、实现步骤 2.1 ranger-usersync包下载编译 2.2 构建压缩包 2.3 编辑元数据文件 2.4 修改源码 三、重新安装 一、简介 如下是DDP1.2.1默认有的rangerAdmin&#xff0c; 我们需要将rangerusersync整合进来 ,实现将Linux机器上的用户和组信息同步到Ranger…

Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁

说明 JDK1.6为了减少获得锁和释放锁所带来的性能消耗&#xff0c;引入了“偏向锁”和“轻量级锁”&#xff0c;所以在JDK1.6里锁一共有四种状态&#xff0c;无锁状态&#xff0c;偏向锁状态&#xff0c;轻量级锁状态和重量级锁状态&#xff0c;它会随着竞争情况逐渐升级。锁可以…

资源分享—2021版三调符号库

汇总整理平台软件支持过程中客户项目提供的各类资源&#xff08;包括但不限于符号库、地图模板等&#xff09;&#xff0c;在客户允许情况下进行集团内分享。 本次分享新版国土空间规划【三调符号库&#xff08;2021版&#xff09;】&#xff0c;提供SuperMap格式符号库下载。 …

都2024年了,你的网站还敢用http访问?

在科技日新月异的今天&#xff0c;互联网已经成为我们生活中不可或缺的一部分。然而&#xff0c;在这个数据安全和隐私保护越来越受到重视的时代&#xff0c;我们不得不重新审视那些看似熟悉的技术标准&#xff0c;比如HTTP&#xff08;超文本传输协议&#xff09;。2024年&…

【c++】C++ IO流

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案

文章目录 Pre对称密钥的死穴 - 经典的密钥配送问题什么是非对称密钥非对称密钥解决密钥配送问题的四个方案共享密钥密钥分配中心&#xff08;KDC&#xff09;Diffie-Hellman 密钥交换体系公钥密码体系RSA算法 Pre 对称密钥的死穴 - 经典的密钥配送问题 假设 Alice 和 Bob 两个人…

B端界面:英文换成了中文,怎么就成了卖家秀和买家秀呢?

首先看看AI给我的回答。 为什么英文B端界面换成了中文 就成了卖家秀和买家秀呢&#xff1f; 这可能是因为平台希望吸引更多的中国卖家和买家。使用中文界面可以方便中国用户的操作和沟通&#xff0c;同时也能更好地满足他们的需求。卖家秀和买家秀可能是平台为了促进交流和展示…

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…

HackTheBox--Headless

Headless测试过程 1 信息收集 NMAP端口扫描 nmap -sSCV 10.10.11.85000端口测试 检查页面功能&#xff0c;请求 For questions 功能&#xff0c;跳转到 /support 目录 目录扫描 发现 /dashboard 目录 访问 /dashboard 目录&#xff0c;显示未认证&#xff0c;如果通过认证…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序&#xff0c;其中必定有很多辅助内容&#xff0c;这只会增加篇幅&#xff0c;在这里我们更愿意列举一些典型的备份脚本功能&#xff0c;展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

图解 RocketMQ 架构

写在前面 Kafka、RocketMQ都是很出名的中间件&#xff0c;上次我们讲解了Kafka&#xff0c;这次我们来讲讲RocketMQ的原理。 基本架构图 解析 RocketMQ 总共可以分成四个模块 NameServer&#xff1a;提供服务发现和路由功能&#xff0c;管理各种元数据信息。Broker&#xf…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中&#xff0c;边缘点通常标志着不同表面或物体的分界&#xff0c;或者是物体表面上的不规则性&#xff0c;如裂缝、棱角、突起等。点云边缘检测的作用非常重要&#xff0c;最常见是进行特征点…

php校园二手交易网站-计算机毕业设计源码041148

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手交易网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结…

基于AOP的数据字典实现:实现前端下拉框的可配置更新

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 目录 1. 前言 2. 数据字典 2.1. 数据字典简介 2.2. 数据字典如何管理各模块的下拉框 3. 数据字典核心内容解读 3.1. 表结构 3.2. 核心代码 3.2.1. 根据实体类名称获取下属数据字典 3.2.2. 数据字…

回顾 DTC 2024 大会——聚焦数据技术创新:揭秘下一代纯实时搜索引擎 INFINI Pizza

2024 年 4 月 12 日至 13 日&#xff0c;备受瞩目的第十三届“数据技术嘉年华”&#xff08;DTC2024&#xff09;在北京新云南皇冠假日酒店盛大开幕。本次大会由中国 DBA 联盟&#xff08;ACDU&#xff09;与墨天轮社区联合主办&#xff0c;以“智能云原生一体化——DB 与 AI 协…

在先企业字号被申请注册成商标!

今天一网友联系普推商标知产老杨&#xff0c;说自己注册的商标被某公司无效宣告了&#xff0c;去年联系老杨时&#xff0c;当时就给说这个商标名称存在风险&#xff0c;与别人的字号权存在高度近似&#xff0c;而且是同行业同地区在后面注册的。 十几年前某公司先成功注册成字号…

Ubuntu 安装CGAL

一、什么是CGAL CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;是一个广泛使用的开源库&#xff0c;主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构&#xff0c;适用于各种应用领域。以下是 CGAL 的主要功能…