vue3 事件总线mitt 非父子组件间通信

本文介绍了Vue3中移除原生事件总线后,如何通过第三方库mitt实现组件间的发布订阅通信,以及如何在项目中安装和使用它进行简单的非父子组件交互。
摘要由CSDN通过智能技术生成
概述

        (1)vue2的事件总线event bus到vue3就被移除了,vue3需要通过第三方库mitt实现此通信

        (2)采用发布订阅模式,可以一对多发送消息,只要监听了事件都可以获得对应消息;例如A组件发布了消息,那么想要获取这个消息的组件可以是很多个,只要监听了就能获取到

        (3)适用于简单的非父子关系组件的通信,例如兄弟组件,复杂场景建议使用vuex

安装

        npm install mitt -s

使用

        (1) 通常在项目的utils文件夹中新建一个js文件,例如utils/eventBus.js

        (2)分发方

<template>
    <div>
        <h1>分发方</h1>
        <button @click="sending">点我分发数据</button>
    </div>
</template>
<script setup>
import Bus from '../../utils/eventBus'
// 接收消息方法
const sending = () => {
    // 分发数据出去
    Bus.emit('sendMsg', '这是要发送的数据')
}
</script>

(3)接收方

<template>
    <h1 style="margin-top: 50px;">接收方</h1>
</template>
<script setup>
import { onMounted } from 'vue';
import Bus from '../../utils/eventBus'

onMounted(() => {
    receive()
})

// 接收消息方法
const receive = () => {
    // 监听sendMsg传递过来的数据并做处理
    Bus.on('sendMsg', (res) => {
        console.log('res', res);
    })
}
</script>

(4)测试文件

<template>
    <div>
        <child-one></child-one>
        <child-two></child-two>
    </div>
</template>
<script setup>
import ChildOne from './childOne.vue'
import ChildTwo from './childTwo.vue'
</script>

(5)测试结果

于是点击分发组件按钮,触发分发事件;那么接收方组件,监听获取事件的方法体,会打印出获取到的数据

Vue3中,官方建议使用外部的、实现了事件触发器接口的库来实现事件总线的功能,而mitt是其中一个常用的选择。mitt是一个常小巧的库,只有200字节大小,并且支持全部事件的监听和批量移除。它不依赖于Vue实例,可以在不同的框架或项目中使用,例如React、Vue甚至是jQuery项目都可以使用同一个mitt库来实现事件总线的功能。在使用mitt时,你需要先安装mitt库(npm i mitt -s),然后可以通过mitt()创建一个mitt实例,并使用其提供的API来进行事件的绑定、触发和解绑操作。 下面是一些mitt库的常用API: - `emit(name, data)`:触发事件,其中`name`是要触发的事件名称,`data`是需要传递的参数。 - `on(name, callback)`:绑定事件,其中`name`是要绑定的事件名称,`callback`是触发事件后执行的回调函数。 - `off(name)`:解绑事件,其中`name`是需要解绑的事件名称。 在Vue3中使用mitt库可以参考以下步骤: 1. 首先,你需要安装mitt库(npm i mitt -s)。 2. 然后,在需要使用事件总线组件中引入mitt库,例如在你的`bb.vue`组件中,你可以使用`import bus from "../utils/EventBus"`来引入mitt库。 3. 在需要发出事件的地方(例如点击按钮时),可以使用`bus.emit("data", 18)`来触发名为"data"的事件,并传递参数18。 希望这个回答对你有帮助!如果你还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小人参Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值