武汉北京网站建设/seo快排技术教程

武汉北京网站建设,seo快排技术教程,网站建设资料准备,三合一网站建设口碑好Vue 3 事件总线详解:构建组件间高效通信的桥梁 为什么需要事件总线?使用 mitt 实现事件总线1. 安装 mitt2. 创建事件总线3. 在组件中使用事件总线发送端组件(例如 ComponentA.vue)接收端组件(例如 ComponentB.vue&…

Vue 3 事件总线详解:构建组件间高效通信的桥梁

    • 为什么需要事件总线?
    • 使用 mitt 实现事件总线
      • 1. 安装 mitt
      • 2. 创建事件总线
      • 3. 在组件中使用事件总线
        • 发送端组件(例如 ComponentA.vue)
        • 接收端组件(例如 ComponentB.vue)
    • 自定义实现事件总线
    • 总结

在复杂的前端应用中,组件之间的通信往往需要一种灵活且解耦的方式。传统的 Vue 2 中,我们常使用全局事件总线来实现这种通信,但在 Vue 3 中,由于架构和 API 的变化,全局事件总线并非内置方案。本文将为你详细介绍如何在 Vue 3 中实现事件总线,并通过代码示例展示基于 mitt 的轻量级事件总线实现,以及自定义实现的方法。


为什么需要事件总线?

在组件间通信场景中,当组件之间没有直接的父子关系时,我们可以通过事件总线来实现数据传递。事件总线能够实现以下效果:

  • 解耦合通信: 发送者与接收者无需相互依赖,只需关注事件名称与数据内容。
  • 灵活扩展: 对于简单的跨组件通信需求,不必引入状态管理库(如 Vuex/Pinia)。
  • 简化代码逻辑: 通过统一的事件中转,便于维护与调试。

使用 mitt 实现事件总线

mitt 是一个仅 200 行左右代码的极简事件触发器,非常适合用作 Vue 3 的事件总线。

1. 安装 mitt

首先,通过 npm 或 yarn 安装 mitt:

# 使用 npm 安装
npm install mitt# 或者使用 yarn
yarn add mitt

2. 创建事件总线

在项目中创建一个单独的事件总线文件,如 eventBus.js

// eventBus.js
import mitt from 'mitt'const emitter = mitt()export default emitter

3. 在组件中使用事件总线

发送端组件(例如 ComponentA.vue)
<template><div><h2>组件 A</h2><button @click="sendMessage">发送消息</button></div>
</template><script setup>
import emitter from '@/eventBus'  // 根据项目实际路径引入const sendMessage = () => {// 触发事件 'custom-event',传递消息数据emitter.emit('custom-event', 'Hello from Component A')
}
</script>
接收端组件(例如 ComponentB.vue)
<template><div><h2>组件 B</h2><p>收到的消息:{{ message }}</p></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import emitter from '@/eventBus'const message = ref('')// 定义事件处理函数
const updateMessage = (payload) => {message.value = payload
}onMounted(() => {// 监听 'custom-event' 事件emitter.on('custom-event', updateMessage)
})onUnmounted(() => {// 组件销毁时注销事件监听,避免内存泄漏emitter.off('custom-event', updateMessage)
})
</script>

通过上述代码示例,我们实现了组件间的简单通信:当 ComponentA 中点击按钮时,会通过事件总线发送消息;而 ComponentB 监听到该消息后,自动更新显示的内容。


自定义实现事件总线

除了使用 mitt,还可以基于 Vue 3 的响应式 API 自行构造一个简单的事件总线。以下为一个简单的实现示例:

// customEventBus.js
import { reactive } from 'vue'const eventBus = reactive({events: {},// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] = []}this.events[event].push(callback)},// 触发事件emit(event, payload) {if (this.events[event]) {this.events[event].forEach(callback => callback(payload))}},// 注销事件off(event, callback) {if (this.events[event]) {this.events[event] = this.events[event].filter(cb => cb !== callback)}}
})export default eventBus

使用方法与 mitt 类似,在组件中引入 customEventBus,进行事件监听与触发即可。


总结

本文介绍了 Vue 3 中实现事件总线的两种方式:

  • 使用轻量级库 mitt 实现高效解耦的事件通信;
  • 基于 Vue 3 响应式 API 自定义一个简单的事件总线。

事件总线对于非父子组件间的通信场景十分适用,但在大型应用中,建议结合状态管理方案(如 Pinia 或 Vuex)进行更系统化的数据管理。希望这篇文章能帮助你更好地理解并应用 Vue 3 中的事件总线,为组件间通信搭建高效桥梁!


快试试以上代码示例,体验 Vue 3 中事件总线带来的灵活与便捷吧!

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

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

相关文章

MySQL的基础语法1(增删改查、DDL、DML、DQL和DCL)

目录 一、基本介绍 二、SQL通用语法 三、SQL分类(DDL、DML、DQL、DCL) 1.DDL 1.1数据库操作 1.2表操作 1.2.1表操作-查询创建 1.2.2表操作-数据类型 1&#xff09;数值类型 2&#xff09;字符串类型 3&#xff09;日期时间类型​编辑 4&#xff09;表操作-案例 1.2.3…

【Keepalived】Keepalived-2.3.3明确结束对CentOS 7的支持

2025年3月30日&#xff0c;官方发布了Keepalived的最新版&#xff0c;版本号&#xff1a;2.3.3 而2024年11月3日发布的2.3.2版本&#xff0c;在CentOS 7.9上编译的时候&#xff0c;就出现了报错&#xff0c;但是在Alma Linux 8.10上&#xff0c;则可以成功编译安装&#xff0c…

人工智能之数学基础:矩阵对角化的本质

本文重点 前面的课程中,我们学习了矩阵的对角化,基于对角化可以将矩阵A转变为对角矩阵D,但是你有没有想过,为什么要进行矩阵对角化,矩阵对角化究竟做了一件什么事情呢? 矩阵对角化的本质 几何解释: 从几何变换的角度看,矩阵对角化意味着我们找到了一组基,使得线性变…

Redis BitMap 实现签到及连续签到统计

一、引言 用户签到功能是很多应用都离不开的一个板块&#xff0c;单词打开、QQ达人等等为我们所熟知&#xff0c;这项功能该如何实现呢&#xff0c;一些朋友可能想当然的觉得无非将每日的签到数据记录下来不就好了&#xff0c;不会去细想用谁记录&#xff0c;如何记录才合适。 …

IP属地和发作品的地址不一样吗

在当今这个数字化时代&#xff0c;互联网已经成为人们日常生活不可或缺的一部分。随着各大社交平台功能的不断完善&#xff0c;一个新功能——IP属地显示&#xff0c;逐渐走进大众视野。这一功能在微博、抖音、快手等各大平台上得到广泛应用&#xff0c;旨在帮助公众识别虚假信…

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月&#xff0c;飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3&#xff0c;充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…

如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染

vxe-table 渲染百万行数据性能对比&#xff0c;超大量百万级表格渲染&#xff1b;如何在 vue 渲染百万行数据&#xff1b;当在开发项目时&#xff0c;遇到需要流畅支持百万级数据的表格时&#xff0c; vxe-table 就可以非常合适了&#xff0c;不仅支持强大的功能&#xff0c;虚…

阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)

文章目录 Github官网简介模型安装非流式应用示例流式应用示例 Github https://github.com/modelscope/FunASR 官网 https://www.funasr.com/#/ 简介 FunASR是一个基础语音识别工具包&#xff0c;提供多种功能&#xff0c;包括语音识别&#xff08;ASR&#xff09;、语音端…

喜讯 | 耘瞳科技视觉检测与测量装备荣膺“2024机器视觉创新产品TOP10”

3月28日&#xff0c;全球机器视觉行业盛会VisionChina2025&#xff08;上海&#xff09;机器视觉展完美收官。展会期间&#xff0c;由机器视觉产业联盟&#xff08;CMVU&#xff09;举办的“2024机器视觉创新产品TOP10”企业名单正式揭晓&#xff0c;耘瞳科技“工业跨尺度场景实…

数据可视化(matplotlib)-------图表样式美化

目录 一、图表样式概述 &#xff08;一&#xff09;、默认图表样式 &#xff08;二&#xff09;、图表样式修改 1、局部修改 2、全局修改 二、使用颜色 &#xff08;一&#xff09;、使用基础颜色 1、单词缩写或单词表示的颜色 2、十六进制/HTML模式表示的颜色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx&#xff08;发音为“engine-x”&#xff09;是一个开源的高性能HTTP服务器、反向代理服务器、负载均衡器和邮件代理服务器。它由俄罗斯程序员Igor Sysoev开发&#xff0c;首次发布于2004年&#xff0c;旨在解决C10K问题&#xff08;即如何高效地处理10,000个…

WP Mail 邮件发送:WordPress Mail SMTP设置

在我们WordPress搭建个人网站完成后&#xff0c;读者或者客户发送的电子邮件&#xff0c;包括你的WPForms电子邮件通知&#xff0c;如果无法到达预定收件人收件箱&#xff0c;这会对我们网站的运营造成很大的影响&#xff0c;问题在于WordPress Mail SMTP的发送方式。 SMTP&am…

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…

GoLand 2024.3 中文 GO语言开发工具

GoLand 2024.3 中文 GO语言开发工具 文章目录 GoLand 2024.3 中文 GO语言开发工具一、介绍二、效果三、下载 一、介绍 JetBrains GoLand 2024 &#xff0c;是一款GO语言开发工具&#xff0c;全行代码补全&#xff1a;能使用本地运行的上下文感知深度学习模型&#xff0c;可以自…

‌19.思科路由器:OSPF协议引入直连路由的实验研究

思科路由器:OSPF协议引入直连路由的实验研究 一、实验拓扑二、基本配置2.1、sw1的配置2.2、开启交换机三层功能三、ospf的配置3.1、R1的配置3.2、R2的配置3.3、重启ospf进程四、引入直连路由五、验证结果随着互联网技术的不断发展,路由器作为网络互联的关键设备,其性能与稳定…

USB——删除注册表信息

文章目录 背景工具下载地址工具使用删除注册表信息背景 注测表中已记录这个设备的信息,但现在设备描述符又指定为了 WinUSB 设备,所以当设备再次插入的时候,不会发送 0xEE 命令,造成了枚举失败。 两种处理方式: 修改枚举时候的 VID/PID删除 USB 的注册表信息工具下载地址…

如何快速解决django报错:cx_Oracle.DatabaseError: ORA-00942: table or view does not exist

我们在使用django连接oracle进行编程时&#xff0c;使用model进行表映射对接oracle数据时&#xff0c;默认表名组成结构为&#xff1a;应用名_类名&#xff08;如&#xff1a;OracleModel_test&#xff09;&#xff0c;故即使我们库中存在表test&#xff0c;运行查询时候&#…

05-031-自考数据结构(20331)- 哈希表 - 例题分析

哈希表考题主要涵盖四大类型:1)函数设计类(如除留余数法计算地址,需掌握质数p的选择技巧);2)冲突处理类(线性探测法要解决堆积现象,链地址法需绘制链表结构);3)性能分析类(重点计算ASL,理解装填因子α的影响规律);4)综合应用类(如设计ISBN查询系统,需结合实际问…

rustdesk 自建服务器 key不匹配

请确保id_ed25519文件的权限为&#xff1a; -rw------- 1 root root 88 Apr 31 10:02 id_ed25519在rustdesk安装目录执行命令&#xff1a; chmod 700 id_ed25519

强制用户裸奔,微软封锁唯一后门操作

周末刚结束&#xff0c;那个常年将「用户为中心」挂嘴边的微软又双叒叕开始作妖&#xff01; 不错&#xff0c;大伙儿今后可能再没法通过「OOBE\BYPASSNRO」命令绕过微软强制联网要求了。 熟悉 Windows 11 操作系统的都知道&#xff0c;除硬件上诸多限制外&#xff1b; 软件层…