vue3非父子组件间传值 使用mitt

本示例基于vue3

使用要点:发送数据---- $bus.emit('password',num)

接收数据----在onMounted() 中  $bus.on('password',(data)=>{})

双方定一个交换数据的号码,使用该号码发送或接收数据

1、安装

npm i mitt

2、在src文件夹下utils文件夹,在其下在新建bus.js文件

import mitt from 'mitt';
const $bus = mitt();
export default $bus;

3、使用

简单示例

新建两个兄弟组件,demoA发送数据,demoB接收数据

demoA (发出数据)

<template>
    <div class="demoA">
        <h1>demoA</h1>
        <el-button type="primary" @click="increace()">Primary</el-button>
        {
   
   { num }}
    </div>
</template>
 
<script setup>
import { ref,onMounted  } from 'vue';
import $bus from '../utils/bus.js'
 
 
const num = ref(1);
const increace = ()=>{
    setInterval(()=>{
        num.value++;
        // 发送数据
        $bus.emit('event',num)
    },1000)
    
}
</script>

demoB (接收数据)

<script setup>
import { ref,unref,onMounted  } from 'vue';
import $bus from '../utils/bus.js'
 
// 接收数据
onMounted(()=>{
    $bus.on('event',(data)=>{
        console.log(unref(data),'收到值了');
    })
})
</script>

 踩坑点:

1、点击一次,触发多次,导致多次传递重复的值

解决办法:

在传值的页面加上 ↓

onUnmounted(() => {
    $bus.off('event');
});