当前位置: 首页 > news >正文

在 Vue3 中使用 mitt 进行组件通信

npm 包地址

mitt 是一个轻量级的 JavaScript 事件触发器, 只有200b。有基本的事件触发、订阅和取消订阅功能,还支持用命名空间来进行更高级的事件处理。

功能特点:

  • Microscopic —— weighs less than 200 bytes gzipped
  • Useful —— a wildcard “*” event type listens to all events
  • Familiar —— same names & ideas as Node’s EventEmitter
  • Functional —— methods don’t rely on this
  • Great Name —— somehow mitt wasn’t taken

获取 mitt

你可以通过以下几种方式获取 mitt

  • 使用 NPM 包

首先,你需要在项目根目录下使用以下命令安装 mitt

# 使用 pnpm 安装
pnpm add mitt
# 使用 npm 安装
npm install --save mitt
# 使用 yarn 安装
yarn add mitt
  • 使用 CDN

你还可以通过 CDN 获取构建好的 mitt 文件。将以下代码添加到 HTML 文件的 <script> 标签中:

<script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script>

引入 mitt

  • 通过 NPM 包引入

JavaScript 文件顶部使用 import 引入 mitt

// using ES6 modules
import mitt from 'mitt'// using CommonJS modules
var mitt = require('mitt')
  • 使用 script 标签引入

通过直接在 HTML 文件中添加 <script> 标签,引入构建好的 mitt 文件:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><!-- 引入 mitt 文件 --><script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script></head>
</html>

使用 window.mitt 来调用方法。

组件中使用

以实时获取未读消息数量为例。

  1. 首先,新建一个 mitt.js 文件
import mitt from 'mitt'const emitter = mitt()export default emitter
  1. 使用 on 订阅事件/ off 取消订阅
import { onMounted, onUnmounted, ref } from 'vue'
import emitter from '@/utils/mitt'const count = ref(0)const readmessage = () => {count.value = count.value - 1
}
onMounted(() => {emitter.on('messageread', readmessage)...
})
onUnmounted(() => {emitter.off('messageread', readmessage)
})
  1. 使用 emit 触发事件
import emitter from '@/utils/mitt'...
emitter.emit('messageread')
...

在这里插入图片描述
点击查看后,未读消息数量减一。

API

on

注册事件处理器

参数类型说明
typestring | symbolType of event to listen for, or ‘*’ for all events
handlerFunction?Function to call in response to given event

off

移除事件处理器

参数类型说明
typestring | symbolType of event to unregister handler from, or ‘*’
handlerFunction?Handler function to remove

emit

触发事件,可以带参数,参数可以为任意类型值

参数类型说明
typestring | symbolThe event type to invoke
handlerAny?Any value (object is recommended and powerful), passed to each handler
http://www.lryc.cn/news/224431.html

相关文章:

  • SQLite 3.44.0 发布!
  • 本地生活新赛道-视频号团购怎么做?
  • 输入一个url后,会发生什么事?
  • R语言和jsonlite库编写代码示例
  • 容联七陌携手岚时科技,解决医美机构回访3大痛点
  • 自动计算零售数据分析指标?BI软件表示可行
  • Qt读取xml文件并把内容显示到QTableview上
  • xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像
  • 关于unity中 编辑器相关逻辑的记录
  • linux安装配置MongoDB并设置开机启动
  • 1366 - Incorrect string value: ‘\xE5\xB9\xBF\xE5\x85\xB0...‘ for column编码错误
  • K8S篇之谈谈kubelet的上报机制
  • 混沌系统在图像加密中的应用(小波混沌神经网络)
  • Node.js中的文件系统(file system)模块
  • react组件间通信之context
  • 京东数据分析:2023年10月京东洗衣机行业品牌销售排行榜
  • QQ恢复聊天记录,就用这3个方法!
  • 高能数造电池3D打印智能制造小试线,开启全固态电池数字化新时代
  • stable diffusion为什么能用于文本到图像的生成
  • c语言刷题第10周(16~20)
  • Vue.js 响应式系统深度剖析
  • LabVIEW如何才能得到共享变量的引用
  • 界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)
  • Rust和isahc库编写代码示例
  • Win10笔记本开热点后电脑断网的解决方法
  • 跨链知识指南
  • 字符编码转换时发生内存越界引发的摄像头切换失败问题的排查
  • git修改之前的commit提交的作者信息和邮箱信息
  • 《视觉SLAM十四讲》-- 相机与图像
  • 欧科云链:成本与规模之辨——合规科技如何赋能香港Web3生态?