Vue3使用通信组件库mitt作为事件总线实现跨组件通信

mitt 介绍: 

Mitt 是一个在 Vue.js 应用程序中使用的小型事件总线库。该库允许组件进行通信,而不必过度依赖父级或子级组件之间的 props。

先看项目用例:

【 以下转载自:https://blog.csdn.net/yuanlong12178/article/details/139579299 】

在复杂的前端开发中,组件之间的通信是必不可少的环节。而在Vue3中,事件总线(Event Bus)是一种方便且高效的实现跨组件通信的方法。本文将详细介绍如何在Vue3项目中使用事件总线来实现跨组件通信,并提供实际示例代码,帮助你更好地掌握这一技能。

什么是事件总线?

事件总线(Event Bus)可以理解为一个全局的发布/订阅模式,可以通过它来实现不同组件之间的消息传递。在Vue实例或Vue组件中充当一个中央枢纽,通过它可以让一个组件发出事件,而其他组件监听并响应这些事件。

创建事件总线

在Vue3版本中,我们不再使用new Vue()来创建事件总线,而是通过mitt库,该库轻量且专注于事件总线功能。

首先,安装mitt库:

npm install mitt

然后,在项目的某个文件中创建事件总线。例如,我们可以在项目的src目录下创建一个名为EventBus.js的文件:

// src/EventBus.js

import mitt from 'mitt';

const emitter = mitt();

export default emitter; 

发送事件

假设我们有一个名为ComponentA的组件,它需要向其他组件发送事件。我们可以在需要的地方使用事件总线来触发事件。

// src/components/ComponentA.vue
<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
import EventBus from '@/EventBus';

export default {
  name: 'ComponentA',
  methods: {
    sendMessage() {
      EventBus.emit('custom-event', { message: 'Hello from ComponentA!' });
    }
  }
}
</script>

 在上面的代码中,我们通过EventBus.emit方法发送了一个名为custom-event的事件,并携带了消息数据。

监听事件

假设我们有另一个名为ComponentB的组件,它需要监听并响应来自ComponentA发送的事件。我们可以在组件的生命周期钩子中使用事件总线来监听事件。

// src/components/ComponentB.vue
<template>
  <div>{{ receivedMessage }}</div>
</template>

<script>
import EventBus from '@/EventBus';

export default {
  name: 'ComponentB',
  data() {
    return {
      receivedMessage: ''
    };
  },
  created() {
    EventBus.on('custom-event', this.handleCustomEvent);
  },
  beforeUnmount() {
    EventBus.off('custom-event', this.handleCustomEvent);
  },
  methods: {
    handleCustomEvent(payload) {
      this.receivedMessage = payload.message;
    }
  }
}
</script>

在上面的代码中,当组件创建时,我们使用EventBus.on方法监听了名为custom-event的事件,并指定了处理函数handleCustomEvent。当事件发生时,处理函数将更新组件的数据。在组件卸载之前,我们使用EventBus.off方法取消事件监听,以防止内存泄漏。

完整示例

为了更完整地展示如何使用事件总线实现跨组件通信,我们将整个项目的相关代码整合在一起。

创建事件总线

// src/EventBus.js
import mitt from 'mitt';
const emitter = mitt();
export default emitter;

发送事件的组件(ComponentA)

// src/components/ComponentA.vue
<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
import EventBus from '@/EventBus';

export default {
  name: 'ComponentA',
  methods: {
    sendMessage() {
      EventBus.emit('custom-event', { message: 'Hello from ComponentA!' });
    }
  }
}
</script>

监听事件的组件(ComponentB)

// src/components/ComponentB.vue
<template>
  <div>{{ receivedMessage }}</div>
</template>

<script>
import EventBus from '@/EventBus';

export default {
  name: 'ComponentB',
  data() {
    return {
      receivedMessage: ''
    };
  },
  created() {
    EventBus.on('custom-event', this.handleCustomEvent);
  },
  beforeUnmount() {
    EventBus.off('custom-event', this.handleCustomEvent);
  },
  methods: {
    handleCustomEvent(payload) {
      this.receivedMessage = payload.message;
    }
  }
}
</script> 

小结

通过上面的介绍和示例代码,我们可以看到在Vue3项目中使用事件总线实现跨组件通信是非常简单且高效的。事件总线通过发布/订阅模式,实现了不同组件间的松耦合通信,大幅度提高了代码的可维护性和可重用性。

记住使用事件总线时的一些最佳实践:
  1. 解耦合:使用事件总线可以解耦不同组件间的逻辑,实现模块化开发。
  2. 生命周期管理:在组件销毁前取消事件监听,以避免潜在的内存泄漏。
  3. 命名规范:为事件命名时尽量使用唯一且有意义的名字,防止事件冲突。

通过掌握这些技巧,相信你能在实际项目中轻松驾驭组件间的复杂通信需求。

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

无人机飞手教员培训持证,必须会组装,模拟,维修才能带好学员

无人机飞手员的教培训不应仅仅局限于获取飞行执照或证书&#xff0c;而应是一个全面等多、方面的深入能力且&#xff0c;实践以确保导向能够的过程全面。、一个有效地合格的指导无人机学员飞。手教员不仅需要掌握扎实的飞行技能&#xff0c;还需要具备组装、模拟训练、维修。 组…

线性调频信号脉冲压缩并非是一个门信号

如果是频域是门信号&#xff0c;时域是sinc信号&#xff0c;时间越长震荡只会越小。图象是线性卷积做的&#xff0c;肯定没错。

SGLang——结构化语言模型程序的高效执行

前言 大型语言模型 (LLM) 越来越多地用于需要多次生成调用、高级提示技术、控制流和结构化输入/输出的复杂任务。然而&#xff0c;缺乏用于编程和执行这些应用程序的高效系统。新推出的系统 SGLang 旨在通过提供复杂语言模型程序的高效执行来解决这一问题。SGLang 包含前端语言…

828华为云征文|华为云Flexus X轻松实现Redis一主多从高效部署

目录 前言 一、华为云Flexus X加速Redis购买 1.1 Flexus X实例购买 1.2 Redis加速镜像选择 1.3 重置密码 1.4 登录Flexus X实例 1.5 Flexus X实例Redis验证 二、华为云Flexus X主节点Redis配置 2.1 重置密码 2.2 Redis外部访问配置 三、华为云Flexus X从节点Redis配置 3.1 从机…

亚马逊商品详情数据接口:提升运营排名的工具

亚马逊商品详情数据接口是亚马逊平台提供的一种服务&#xff0c;允许用户通过程序调用API&#xff08;应用程序接口&#xff09;来获取亚马逊商品的相关数据。这个接口为开发者和商家提供了丰富的商品信息&#xff0c;有助于优化用户体验、支持购买决策、竞品分析和市场研究等。…

Comfyui海报工作流:出图快,质量高!

前言 工作流获取方式放在这里了 在快节奏的现代生活中&#xff0c;高效的工作流程对于企业和个人而言&#xff0c;无疑是提升竞争力的关键。 特别是在设计领域&#xff0c;能够快速而精准地完成海报设计&#xff0c;不仅意味着时间的节省&#xff0c;更代表着工作效率的飞跃。…

玩转图像处理:Python与OpenCV实现高效绿幕背景替换

文章目录 前言色度抠图技术&#xff08;Chroma Keying&#xff09;基本原理 数据准备代码实现性能分析代码优化优化后的速度 前言 现阶段绿幕抠图有很多种方式&#xff0c;比如色度抠图&#xff08;Chroma Keying&#xff09;、亮度抠图&#xff08;Luma Keying&#xff09;、色…

win7系统安装高于13.14.0版本的node及遇到问题

背景 原项目是在win10系统上&#xff0c;使用的是node16.10.0版本&#xff0c;使用的vite开发&#xff0c;现在需要去客户现场进行开发&#xff0c;提供的电脑是win7系统&#xff0c;因为win7系统支持的最高版本node是13.14.0&#xff0c;所以我们需要降低node版本&#xff0c…

深化战略合作|义翘神州与百奥几何扩大合作:生成式AI深度赋能蛋白研发

近日&#xff0c;重组蛋白领军企业义翘神州与前沿数字生物企业百奥几何达成战略合作&#xff0c;将蛋白表达湿实验平台与生成式AI蛋白设计和改造有机结合。在前期项目成功合作的基础上&#xff0c;双方决定进一步深化合作&#xff0c;合力开拓高附加值市场需求。 当前&#xf…

opencv实战项目二十五:复杂背景下的直线提取

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、简介二&#xff0c;算法实现&#xff1a;2.1 中值滤波去噪2.2滤波图像取反并提取直线2.3 二值图细化2.4 对细化后的直线进行霍夫变换 前言 在当今计算机视…

超越想象的声音修复——iZotope RX 11,重塑音频处理的未来

iZotope RX 11是一款功能强大的音频修复和增强软件&#xff0c;专为音频后期制作、音乐制作和内容创作而设计。以下是其主要功能和用途的详细概述&#xff1a; iZotope RX 11 苹果Mac软件下载 iZotope RX 11 Windows软件下载 主要功能 智能降噪与修复&#xff1a; RX 11配备了…

ARM相关概念

ARM课程大纲 ARM相关的基本概念 机器码 计算机能够识别由1和0组成的编码格式 汇编&#xff1a;将汇编文件转换为二进制文件&#xff08;.bin/.elf&#xff09; 汇编指令 是一条具备特殊功能的指令 编译&#xff1a;生成汇编文件 int a 10; ------> mov r0 #10 …

Qt/C++ 了解NTFS文件系统,解析0x80 $Data属性,获取Run Lists数据列表

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统&#xff0c;了解MFT(Master File Table)主文件表&#xff08;一&#xff09; 介绍NTFS文件系统&#xff0c;对比通过MFT(Master File Tab…

springboot中小学数字化教学资源管理平台

基于springbootvue实现的中小学数字化教学资源管理平台 &#xff08;源码L文ppt&#xff09;4-078 第4章 系统设计 4.1 功能模块设计 系统整体模块分为管理员、教师和学生三大用户角色,整体功能设计图如下所示: 图4-1 系统整体功能图 4.2 数据库设计 4.2.1 E-R模…

工业交换机故障快速排查的方法有哪些

在现代工业自动化的环境中&#xff0c;工业交换机作为网络连接的重要设备&#xff0c;其稳定性和可靠性至关重要。然而&#xff0c;实际使用过程中难免会遇到各种故障&#xff0c;这对生产线和系统的正常运作造成了影响。为了有效应对这些问题&#xff0c;下面将介绍一些工业交…

CSRF高级防御绕过

1&#xff09;回顾low级别做过csrf页面的密码重置&#xff0c;重复之前的操作&#xff0c;我们发现级别调整中级之后&#xff0c;报错如下 2&#xff09;检查源码 进入dvwa源码&#xff0c;查找到checktoken&#xff1a; 3&#xff09;在dvwa-csrf页面上&#xff0c;抓包 http…

前端开发者有福啦,循序渐进Vue.js 3.x前端开发实践已上线

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 好书推荐&#xff01;前端开发者的福利来喽&#xff0c;《循序渐进Vue.js 3.x前端开发实践》&#xff0c;你值得拥有。 推荐图书 《循序渐进Vue.js 3.x前端开发实践》 推荐理由 《循序渐进Vue.js 3.x前端开发实践》…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节&#xff1a;Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节&#xff1a;隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

【C语言进阶】第四节:自定义类型详解

1、结构体 1.1 结构体变量的定义和初始化 struct Point//类型声明 {int x;int y; }p1;//声明类型的同时定义变量p1struct Point p2;//定义结构体变量p2//初始化&#xff1a;定义变量的同时赋初值。 struct Point p3 { x, y };struct Node {int data;struct Point p;struct N…

端侧 AI 的新突破:面壁智能 MiniCPM 3.0

在人工智能领域&#xff0c;每一次技术的革新都可能引发一场小小的革命。 ChatGPT-3.5 曾经凭借其惊人的表现赢得了大众的关注&#xff0c;但如今&#xff0c;随着国内AI公司面壁智能推出的新端侧基座模型&#xff0c;人们开始重新审视端侧AI的潜力和未来。 这款名为MiniCPM …