上一篇升級筆記提到,雖然 Vue 3.0 移除了事件處理的 $on, $off 以及 $once 等 API, 然而我們還是可以借助其他方式來達到 EventBus 的效果。

這是今天的主角 Mitt

mitt

Mitt 是一套用來處理事件訂閱/發佈的函式庫,透過 Mitt 我們可以將 Vue 3.0 移除的 $on, $off 等功能再度重現,而更重要的是,它只有 200 byte

你沒看錯,不是 200 kb,是 200 byte。

安裝

這裡我們透過 vite 來建立一個簡單的 Vue 3.0 專案:

$ yarn create vite-app <project-name>
$ cd <project-name>
$ yarn

接著為專案加入 mitt:

$ yarn add mitt

這樣就完成前置作業了。

建立 mitt 實體

mitt 的使用方式與過去透過空的 Vue 實體幾乎一樣。 我們在專案建立 mitt 實體,假設取名叫 bus.js:

import mitt from 'mitt'
export default mitt()

就兩行。

接著,分別在需要訂閱與接收事件的 Vue Component 裡,加入 bus.js :

import bus from './bus';

事件接收方,這裡在 created 階段訂閱 plus 自訂事件:

data() {
  return {
    count: 0
  }
},
methods: {
  plus () {
    this.count++;
  }
},
created() {
  bus.on('plus', this.plus);
}

事件發送方,建立一個 emit method 來向 bus 發送 plus 事件:

methods: {
  emit () {
    bus.emit('plus');
  }
}

以下是簡單的 Vue 3.0 Demo: