Mitt —— 小而美的事件总线库

简介

Mitt是一个小巧而强大的 JavaScript 事件总线库,用于处理事件的发布和订阅。

用法示例

1、使用vite创建示例项目

项目名称:mitt-demo

框架:vue.js 3

bash 复制代码
$ yarn create vite

√ Project name: ... mitt-demo
√ Select a framework: >> Vue
√ Select a variant: >> JavaScript

2、进入示例项目根目录并安装依赖

bash 复制代码
# 进入项目根目录
$ cd mitt-demo
# 安装依赖
$ yarn

3、在项目中安装mitt

bash 复制代码
# 安装mitt
$ yarn add mitt

4、创建bus.js文件

src文件夹下创建utils文件夹,然后在utils文件夹下创建bus.js文件,bus.js文件内容如下:

js 复制代码
import mitt from 'mitt'
// 创建事件总线实例
const emitter = mitt()
export default emitter

我们在bus.js文件中通过mitt()创建了一个事件总线实例,用于发布和订阅事件。

5、创建事件发布组件 ------ EventPublisher.vue

src/components文件夹下创建事件发布组件 ------ EventPublisher.vue,文件内容如下:

vue 复制代码
<script setup>
import { ref } from 'vue'
import emitter from '../utils/bus'

const count = ref(0)

// 事件发布方法
const publish = () => {
  console.log('== 发布事件 ==')
  emitter.emit('incr', count.value += 1)
}
</script>

<template>
  <button @click="publish">发布事件</button>
</template>

<style scoped>
</style>

6、创建事件监听组件 ------ EventListener.vue

src/components文件夹下创建事件监听组件 ------ EventListener.vue,文件内容如下:

vue 复制代码
<script setup>
import { ref, onBeforeMount, onMounted } from 'vue'
import emitter from '../utils/bus'

const count = ref(0)

onMounted(() => {
  // 监听事件
  console.log('== 监听事件 ==')
  emitter.on('incr', (res) => {
    count.value = res
  });
})

onBeforeMount(() => {
  // 取消监听
  console.log('== 取消监听 ==')
  emitter.off('incr')
});
</script>

<template>
  <div class="listener">消息内容:{{ count }}</div>
</template>

<style scoped>
.listener {
  background-color: beige;
}
</style>

7、修改App.vue

App.vue中引入事件发布组件、事件监听组件。

vue 复制代码
<script setup>
import EventPublisher from './components/EventPublisher.vue'
import EventListener from './components/EventListener.vue'
</script>

<template>
  <event-publisher></event-publisher>
  <event-listener></event-listener>
</template>

<style scoped>
</style>

8、启动项目,查看效果

参考

相关推荐
可视之道1 天前
Canvas 渲染引擎性能优化实战:从 15 FPS 到 55 FPS
前端
进击的尘埃1 天前
拖拽搭建场景下的智能布局算法:栅格吸附、参考线与响应式出码
javascript
小猪努力学前端1 天前
基于PixiJS的试玩广告开发-续篇
前端·javascript·游戏
bluceli1 天前
前端构建工具深度解析:从Webpack到Vite的演进之路
前端
wuhen_n1 天前
v-model 的进阶用法:搞定复杂的父子组件数据通信
前端·javascript·vue.js
wuhen_n1 天前
TypeScript 深度加持:让你的组合式函数拥有“钢筋铁骨”
前端·javascript·vue.js
滕青山1 天前
基于 ZXing 的 Vue 在线二维码扫描器实现
前端·javascript·vue.js
Kayshen1 天前
我在设计工具里实现了一个 Agent Team:多智能体协作生成 UI 的实战经验
前端·aigc·agent
swipe1 天前
深入理解 JavaScript 中的 this 绑定机制:从原理到实战
前端·javascript·面试
Json_Lee1 天前
2026 年了,多 Agent 编码该怎么选?agent-team vs Claude Agent Teams vs Claude Squad vs Met
前端·后端·vibecoding