Vue3 - 使用 mitt.js 进行组件通信(兄弟关系)

news2025/7/19 19:11:39

前言

在 Vue2 中,两个同级(兄弟关系)的组件传递数据,都是利用一个叫 EventBus 事件总线,利用这根总线,可以让两个毫无关系的组件进行通信。

其实这个问题的本质核心解决方案,就一句话。通过第三个 “东西”,一个往里写,一个读取。

在这里插入图片描述

而有的同学呢,选择了另外一种方式,那就是借助 Vuex 状态管理,同样的道理,借助第三方。

Mitt.js 安装及使用方法

那么在 Vue3 中,如何实现兄弟组件传参呢?

来看下官方文档,对于这件事的描述:

https://v3.cn.vuejs.org/guide/migration/events-api.html#%E6%A6%82%E8%A7%88


好,我们来使用 MITT 第三方库,首先第一步就是安装。

在项目根目录,执行命令:

// 来先来 ls 命令输出一下文件列表
cnpm install --save mitt

我这块用淘宝源 cnpm,如果不行就用 yarn,安装成功:

在这里插入图片描述

第二步呢,在 src 目录下新建一个 bus 文件夹,里面再建一个 bus.js 文件,用来存放咱们的 EventBus 事件总线。

bus.js 文件中,写入代码。

// 引入库
import mitt from "mitt"
// 创建事件总线
const emitter = mitt()
// 导出
export default emitter

好,bus 总线也有了,我们再创建 2 个用于测试的组件。

components 新建 A.vue / B.vue

先在 A.vue 中写好基础模板,再复制一份给 B.vue

<template>
    <div>A</div>
</template>

<script>
export default {
    setup() {
        
    }
}
</script>

然后咱们打开父组件,把这 2 个兄弟组件引入。

<template>
  <A />
  <hr>
  <B />
</template>

<script>
import A from './components/A.vue'
import B from './components/B.vue'
export default {
  components: { A, B },
  setup() {
    
  }
}
</script>

在这里插入图片描述

好,显示出来了。

一切准备就绪,接下来咱们打开 A.vue 组件,给 B 组件进行传参。

<template>
    <!-- 给B组件进行传值 -->
    <div>A</div>
    <button @click="send">给B组件进行传值</button>
</template>

<script>
// 引入EventBus总线
import emitter from '../bus/bus.js'
export default {
    setup() {
        // 给B组件进行传值
        const send = () => {
            emitter.emit('param', { title: '我是A组件的内容' })
        }
        // return
        return { send }
    }
}
</script>

好,我们再打开 B.vue,接收 A 组件的传值。

<template>
    <!-- 接收兄弟组件A的传值 -->
    <div>B</div>
    <p>{{ title }}</p>
</template>

<script>
// 引入EventBus总线
import emitter from '../bus/bus.js'
// 引入"卸载之前调用"的生命周期钩子函数与包装响应式变量
// 这个钩子函数主要用于关闭EventBus总线的监听,不关闭会造成触发多次的问题
import { onBeforeUnmount, ref } from 'vue'
export default {
    setup() {
        // 创建响应式变量接收传参
        const title = ref('')
        // 监听兄弟组件传参
        // 第一个参数: 监听的连接名
        // 第二个参数: 传递的数据
        emitter.on('param', data => {
            console.log(data)
            title.value = data.title
        })
        // 页面卸载时关闭监听连接
        onBeforeUnmount(() => {
            // 传入要关闭的连接
            emitter.off('param')
        })
        // return
        return { title }
    }
}
</script>

在这里插入图片描述

非常的 Nice 啊。

写在后面

额外注意页面卸载,也就是关闭后,一定要通过 off 来关闭连接,不关的话,如果页面存在跳页等操作,传参会触发两次甚至多次,消耗无用内存。

再说你想想,这玩意要是不用关,它为什么设计出一个让你关闭的方法供你调用呢?

是吧!老老实实遵循人家的使用规范,没有错!

SEO

vue3.js 官方文档,vue3使用mitt.js库进行组件通信,vue3mitt.js官方文档教程,mitt.js 使用教程,Vue3 - 使用 mitt.js 进行组件通信(兄弟关系),Vue3.x使用mitt.js进行组件通信,vue3兄弟组件通信-mitt,vue3 兄弟组件通信—mitt,vue3兄弟组件通讯(mitt) ,Vue3兄弟组件传值之mitt的超详细讲解,Vue3.x 推荐使用 mitt.js,Vue3使用mitt进行组件通信,Vue3.x使用mitt.js进行组件通信,Vue3使用mitt进行组件通信的步骤,Vue3.x使用mitt.js进行组件通信,Vue3兄弟组件传值之mitt的超详细讲解,Vue3使用mitt进行组件通讯,Vue3兄弟组件传值之mitt怎么安装使用,Vue3 - 使用 mitt.js 进行组件通信(兄弟关系)。

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

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

相关文章

开传奇需要什么技术要什么条件

开传奇需要什么技术要什么条件 对于这个问题&#xff0c;近期问的人比较多。这也是热爱传奇这个游戏的朋友会问到的一个问题&#xff0c;因为喜欢玩这个游戏&#xff0c;也想要自己去开一个经营一个 不管是电脑端还是手机端。但是对于一些新手确实不知道该如何开始操作从哪些方…

基于PHP+MySQL的校园二手旧书回收捐赠系统

校园内因为所教授的课程比较多,人数基数也比较大,所以每年都会产生大量的二手废旧图书,很多时候这些图书还可以进行二次利用,如果直接当废品进行回收很暴殄天物的,所以为了能够让这些校园内的二手图书得到更多的利用,我们开发了PHP校园二手旧书回收捐赠系统 本系统分为前台和后…

「Redis数据结构」压缩列表(ZipList)

「Redis数据结构」压缩列表&#xff08;ZipList&#xff09; 文章目录「Redis数据结构」压缩列表&#xff08;ZipList&#xff09;一、概述二、结构三、连锁更新问题四、压缩列表的缺陷五、小结参考ZipList 是一种特殊的“双端链表” &#xff0c;由一系列特殊编码的连续内存块…

基于协同过滤进行金融产品个性化推荐 代码+数据

1.案例简介 (1)方法概述: 本教程包含如下内容: 从原始的数据文件中加载数据,进行训练集和测试集的切分。 对数据分batch, 利用用户侧信息,和商品侧信息,进行双塔模型的训练 结果展示 (2)宏观流程图 (3)案例知识点 pytorch 视频CTR预估指标 博客point wise 以及 pair wise …

从0到1图文教你如何将spring boot项目部署到minikube中去

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 源码 本项目博文的源码已上传github&#xff0c;有需要自取 github: https://github.com/weihubeats/weihubeats_demos/tree/master/spring-boot-demos/spring-…

C#界面里Control.Enabled 属性的使用

C#界面里Control.Enabled 属性的使用 在开发中即使一个细节也可以决定成败。 前段时间刚好是毕业季,公司招聘了很多应界毕业生, 由于项目非常多,许多老手都已经分配到各个项目上去,还有一些小项目不得不让这些新生力军来接手。 这些初生牛犊不怕虎,天天加班,夜夜苦战…

idea打开之前的项目不能正常编译/idea中项目Compile output丢失问题

报错笔记 文章目录错误一&#xff1a;Cannot resolve class or package java错误二&#xff1a;Compile output丢失问题下面的报错发生情况都是打开之前写的JavaWeb文件时&#xff0c;各个文件中的代码爆红错误一&#xff1a;Cannot resolve class or package ‘java’ 在idea…

【安卓应用渗透】第一篇:安卓逆向回顾和梳理-2211

文章目录安卓开发课程回顾第一课&#xff1a;安卓项目文件结构&#xff08;逻辑视图&#xff09;第五课&#xff1a;文件读取和数据库存取文件存取SQLite数据库存取安卓开发&#xff1a;案前资料库安卓逆向课程回顾第一课&#xff1a;基础逆向工具&#xff08;Apktool, Keytool…

【分享】订阅金蝶云进销存集简云连接器同步销货数据至金蝶云进销存系统

方案场景 在企业规模不断壮大的过程中&#xff0c;企业都是在钉钉内提交OA审批&#xff0c;并通过人工的方式统计多种审批数据&#xff0c;然后手动导入到某系统内&#xff0c;如果中间有调整又需要从头再进行核对&#xff0c;繁琐的流程严重影响了业务拓展。基于该方式企业希…

[附源码]SSM计算机毕业设计重庆工程学院教师宿舍管理系统论文JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Eolink征文活动--推荐国产神器Eolink!API优先,Eolink领先!

前言&#xff1a; 在我们后端开发者做项目的时候&#xff0c;避免不了与前端界面的交互&#xff0c;对于我来讲&#xff0c;在做项目的时候用到过postman&#xff0c;swagger做接口测试工作&#xff0c;在公司的时候公司主要用YApi可视化接口平台&#xff0c;最近使用了一个爆款…

负担过重何以轻装前行

随波逐流并不一定过得容易。 猜测负担过重原因&#xff1a; 所作的事情和预期差异大自己并不擅长目前所从事的专业恐惧失败试错成本过高基础薄弱无法持续成长简单问题复杂化复杂问题简单化…… 如何改变这种情况&#xff1f; 自我认知和外部感知都存在分析错位和信息不对称的…

解决ggplot绘制散点图形状超过6个的警告

正常画图&#xff1a; library(ggplot2) ggplot(mpg,aes(displ,hwy))geom_point(aes(shapeclass,colorclass))可以看出形状少了一个&#xff0c;SUV没有形状 并且还会弹出这样的警告&#xff1a; Warning message: “The shape palette can deal with a maximum of 6 discrete…

【附源码】Python计算机毕业设计网络求职招聘系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

更灵活定位内存地址的方法

更灵活定位内存地址的方法 文章目录更灵活定位内存地址的方法1.and和or2.以字符形式给出的数据3.[bxidata]4.SI、DI与寻址方式的灵活应用1.and和or and指令&#xff1a;逻辑与指令&#xff0c;按位进行与运算(同真为真) 比如&#xff1a; mov al, 01100011B and al, 00111011B …

速锐得适配进口福特烈马BRONCO车载 CAN总线应用随动转向大灯改装

适配进口福特烈马BRONCO车载 CAN总线应用随动转向大灯改装&#xff0c;必须先获得福特烈马BRONCO的原厂电路图纸&#xff0c;为此&#xff0c;速锐得准备了福特诊断仪、福特烈马BRONCO原厂电路图纸工具&#xff0c;适配装置、CAN数据采集设备、软件及线缆等一系列工具。 我们首…

【附源码】Python计算机毕业设计石家庄学院跳蚤市场

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[数据结构]二叉树的链式结构

作者&#xff1a; 华丞臧专栏&#xff1a;【数据结构】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。推荐一款刷题网站 &#x1f449; LeetCode刷题网站 目录 前言 一、二叉树的链式结构 二…

10 种创新的智慧废弃物管理技术

美国人每年产生约 2.5 亿吨垃圾&#xff0c;其中只有 34% 被回收。尽管有环保意识&#xff0c;但其他几项统计资料&#xff0c;揭示了令人震惊的垃圾倾向。废弃物管理的复杂性以前从未如此极端&#xff0c;这就是为什么今天这个行业僱用了近 50 万人&#xff0c;他们承担着每天…

【序列比对】Needleman-Wunsch(全局)和Smith-Waterman(局部)算法py实现(多条回溯路径,三叉树思路,超详细注释)

Needleman-Wunsch和Smith-Waterman算法py实现&#xff08;多条回溯路径&#xff09; 话不多说&#xff0c;直接上结果图&#xff0c;多条回溯路径。 原理 代码详解&#xff08;以NW为例&#xff09; 导入包以及参数设置 import numpy as npsequence_1 "AACGTACTCAAG…