手寫Mitt實現事件訂閱、發布和取消訂閱

  • Mitt類設計

  1. emitter屬性:用于存儲事件和對應的處理器
  2. on方法:訂閱事件
  3. off方法:取消訂閱事件
  4. emit方法:觸發事件
export class Mitt<T> {private readonly emitter: Record<string, Array<(value: T[keyof T]) => void>> = {};/*** 訂閱事件* @param eventName 事件名稱,應為T的屬性名* @param cb 事件處理函數*/on(eventName : string, cb : ( value : T[keyof T]) => void ) {this.emitter[eventName] ? this.emitter[eventName].push(cb) : this.emitter[eventName] = [cb];}/*** 取消訂閱事件* @param eventName 事件名稱,應為T的屬性名* @param cb 事件成功回調*/off(eventName: string, cb?: () => void): void {delete this.emitter[eventName];if (cb) { cb(); }}/*** 取消所有訂閱事件*/offAll() {Object.keys(this.emitter).forEach(key => {delete this.emitter[key];});}/*** 發布事件* @param eventName 事件名稱,應為T的屬性名* @param value 事件參數*/emit(eventName : string, value : any) {if (this.emitter[eventName]) {this.emitter[eventName].forEach(cb => cb(value));}}}
  • ?使用Mitt實例

  1. 創建Mitt實例:實例化Mitt類
  2. 訂閱事件:調用on方法訂閱事件
  3. 觸發事件:調用emit方法觸發事件
  4. 取消訂閱:調用off方法取消訂閱?
    import  { Mitt } from "@/utils/Mitt";let mitt = new Mitt();mitt.emit("test", [1,2,3,4]);mitt.on("test", (data: []) => {console.log(data);});setTimeout(() => {mitt.off("test", () => {console.log("取消了");});},30000);

?提示:off方法回調參數是可選的,如果提供,會在取消訂閱后執行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19966.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19966.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI邊緣計算盒子在智慧交通的應用

方案背景 隨著經濟增長&#xff0c;交通出行需求大幅增長&#xff0c;但道路建設增長緩慢&#xff0c;交通供需矛盾日益顯著&#xff0c;中心城區主要道路高峰時段交通擁堵嚴重&#xff0c;道路交通擁堵逐漸常態化&#xff0c;成為制約城市可持續發展的重要因素之一。 痛點問題…

web 前端開發技術---網頁的制作

這是一個網頁代碼 上年包含了電子郵件&#xff0c;選項建 等等 分享給大家 <!-- prj_7_1.html --> <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>留言板設計</title><style type&…

【C++】入門(一):命名空間、缺省參數、函數重載

目錄 一、關鍵字 二、命名空間 問題引入(問題代碼)&#xff1a; 域的問題 1.::域作用限定符 的 用法&#xff1a; 2.域的分類 3.編譯器的搜索原則 命名空間的定義 命名空間的使用 舉個&#x1f330;栗子&#xff1a; 1.作用域限定符指定命名空間名稱 2. using 引入…

【數據結構與算法 | 堆篇】JAVA實現小頂堆

1. 堆的特點 堆的邏輯結構是數組&#xff0c;內存結構是完全二叉樹.完全二叉樹即只有最后一層才有葉子節點.堆又分為大頂堆與小頂堆. 大頂堆的特點是 : 父親節點比孩子節點的都要大. 小頂堆的特點與其相反.Java的優先級隊列(PriorityQueue)的底層實現即用到了小頂堆. 所以下文…

K210視覺識別模塊學習筆記3:內存卡寫入拍攝圖片_LED三色燈的操作_按鍵操作_定時器的配置使用

今日開始學習K210視覺識別模塊: LED三色燈的操作_按鍵操作_定時器的配置使用_內存卡寫入拍攝圖片 亞博智能的K210視覺識別模塊...... 本文最終目的是編寫一個按鍵拍照的例程序&#xff1a; 為以后的專用場景的模型訓練做準備&#xff0c;因為訓練自己的模型需要大量的圖片&a…

jmeter基礎入門練習題

jmeter存在A,B兩個線程組的情況下&#xff0c;默認設置下&#xff0c;運行順序是&#xff1a;A A&#xff1a;A,B同時運行 B&#xff1a;先運行A&#xff0c;在運行B C&#xff1a;先運行A&#xff0c;等待2s運行B D:先A運行完&#xff0c;等待默認設置時間后運行B 下列說法正…

編譯安裝PHP服務(LAMP3)

目錄 1.初始化設置&#xff0c;將安裝PHP所需軟件包傳到/opt目錄下 &#xff08;1&#xff09;關閉防火墻 &#xff08;2&#xff09;上傳軟件包到/opt目錄 2.安裝GD庫和GD庫關聯程序&#xff0c;用來處理和生成圖片 3.配置軟件模塊 4.編譯及安裝 5.優化把PHP 的可執行程…

nginx的安裝001

Nginx是一款高性能的HTTP和反向代理服務器&#xff0c;以及郵件代理服務器&#xff0c;由 Igor Sysoev 開發并公開發布于2004年。Nginx以其高并發處理能力、低內存消耗和穩定性著稱&#xff0c;特別適合部署在高流量的網站上。 操作系統&#xff1a; CentOS Stream 9 安裝步驟…

【算法訓練 day44 分割等和子集】

目錄 一、分割等和子集-LeetCode 416思路實現代碼1.二維dp代碼2.一維dp代碼 問題總結 一、分割等和子集-LeetCode 416 Leecode鏈接: leetcode 416 文章鏈接: 代碼隨想錄 視頻鏈接: B站 給你一個 只包含正整數 的 非空 數組 nums 。請你判斷是否可以將這個數組分割成兩個子集&…

SQL入門教程,很詳細

SQL&#xff08;Structured Query Language&#xff09;是一種用于管理關系數據庫的標準語言。它被廣泛用于存儲、操作和檢索數據。在這篇文章中&#xff0c;我們將介紹SQL的基本概念和常用命令。 首先&#xff0c;我們需要了解SQL的基本結構。SQL語句通常由以下幾個部分組成&…

頭歌數據結構與算法課程設計易-算式運算的合法性

給定一個算式運算&#xff0c;算式由運算數、、-、、/、(、)組成&#xff0c;請編寫程序判斷該算式運算是否合法。如果合法&#xff0c;計算該算式的值。 輸入描述&#xff1a; 第一行輸入一個運算表達式 輸出描述&#xff1a; 如果表達式合法則計算其值&#xff0c;結果保留兩…

c語言之向文件讀寫數據塊

c語言需要向文件讀寫數據塊需要用到fread語句和fwrite語句 fread語句的語法格式 fread(butter,size,count,fp) butter&#xff1a;讀取的數據存入內存地址 size:讀取的字節大小 count:讀取數據的個數 fp:讀取的文件指針 fwrite語句語法格式 fwrite(butter,size,count,fp…

企業如何利用社交媒體二維碼做宣傳?提升品牌形象

和普通的二維碼不同&#xff0c;社交媒體二維碼可以通過一個二維碼鏈接企業的超過16的社交媒體渠道鏈接&#xff0c;包括&#xff1a;企業官網、小程序、公眾號、淘寶店鋪、抖音鏈接、小紅書鏈接、美團鏈接、餓了么鏈接…等等。掃描之后&#xff0c;可以在這個社交媒體二維碼界…

校園志愿者|基于SprinBoot+vue的校園志愿者管理系統(源碼+數據庫+文檔)

校園志愿者管理系統 目錄 基于SprinBootvue的校園志愿者管理系統 一、前言 二、系統設計 三、系統功能設計 1 系統功能模塊 2管理員功能 3志愿者功能 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&a…

采購訂單審批和取消例子

文章目錄 1 Introduction2 Example 1 Introduction This is a exmaple for releaseing po and reseting po. 2 Example DATA:lw_in TYPE zmms015,lw_out TYPE zmms015_out,lt_head LIKE TABLE OF ZMMT003_head,lw_head TYPE ZMMT003_head,lt_item TYPE zmmt003_item_t,lt…

12.RedHat認證-Linux文件系統(下)

12.RedHat認證-Linux文件系統(下) swap虛擬內存 我加一個硬盤做實驗sdc # 創建交換分區&#xff08;不用做成邏輯卷也能靈活分區&#xff09; [rootcentos8 ~]# fdisk /dev/sdc -l Disk /dev/sdc&#xff1a;10 GiB&#xff0c;10737418240 字節&#xff0c;20971520 個扇區 …

REX 521饋線保護繼電器提供 您的高效中壓網絡 保護、測量、監控和基本 控制功能

REX 521饋線保護繼電器提供 您的高效中壓網絡 保護、測量、監控和基本 控制功能。典型的REX 521應用包括輸入和輸出饋線 在隔離中性點中&#xff0c;諧振接地&#xff0c;牢固 接地和電阻接地系統。 …完善ABB繼電器解決方案系列 這種最先進的保護繼電器補充了ABB的一系列解決方…

深入理解linux文件系統與日志分析

深入理解linux文件系統與日志分析 linux文件系統: 文件是存儲在硬盤上的&#xff0c;硬盤上的最小存儲單位是扇區&#xff0c;每個扇區的大小是512字節。 inode&#xff1a;元信息&#xff08;文件的屬性 權限&#xff0c;創建者&#xff0c;創建日期等等&#xff09; block…

【AVL Design Explorer DOE】

AVL Design Explorer DOE 1、關于DOE的個人理解2、DOE參考資料-知乎2.1 DOE發展及基本類型2.2 DOE應用場景2.3 Mintab 中的 DOE工具3、AVL Design Explorer DOE示例 1、關于DOE的個人理解 仿真和試驗一樣&#xff0c;就像盲人摸象&#xff0c;在不知道大象的全景之前&#xff…

Java 垃圾回收

一、概述 GC GC(Garbage Collection)&#xff0c;在程序運行過程中內存空間是有限的&#xff0c;為了更好的的使用有限的內存空間&#xff0c;GC會將不再使用的對象清除然后將其所占用的內存釋放出來。 java的垃圾回收機制 Java的垃圾收集&#xff08;Garbage Collection, …