Vue3.xはコンポーネント通信にmitt.jsを使用します

Vue3.xはコンポーネント通信にmitt.jsを使用します

Vue2.x はコンポーネント通信に EventBus を使用しますが、Vue3.x では mitt.js の使用が推奨されています。

Vue インスタンスでは、mitt.js は EventBus よりも優れている点は何ですか?まず、サイズが 200 バイトと非常に小さいです。次に、すべてのイベントの監視と一括削除をサポートしています。Vue インスタンスに依存しないため、フレームワーク間で使用できます。React や Vue、さらには jQuery プロジェクトでも同じライブラリを使用できます。

クイックスタート

npm インストール --save mitt

方法 1、グローバル バス、Vue エントリ ファイル main.js にグローバル プロパティをマウントします。

'vue' から {createApp} をインポートします。
'./App.vue' からアプリをインポートします。
「mitt」からmittをインポートする

const app = createApp(App)
app.config.globalProperties.$mybus = mitt()

方法 2:カスタム トランザクション バス ファイル mybus.js をカプセル化し、新しい js ファイルを作成して、使用したい場所にインポートします。

'mitt' から mitt をインポートする
デフォルトの mitt() をエクスポートする

方法 3:コンポーネントに直接インポートして使用します。分散型アプローチにより管理とトラブルシューティングが容易になるため、この方法を使用することをお勧めします。

<テンプレート>
  <img alt="Vue ロゴ" src="./assets/logo.png" />
  <HelloWorld メッセージ="こんにちは Vue 3.0 + Vite" />
</テンプレート>

<スクリプト>
'mitt' から mitt をインポートする
'./components/HelloWorld.vue' から HelloWorld をインポートします。

エクスポートデフォルト{
  コンポーネント:
    こんにちは世界
  },
  セットアップ(小道具){
    定数フォームアイテムMitt = mitt()
    戻る {
      フォームアイテムミット
    }
  }
}
</スクリプト>

使い方

実際、mitt の使用方法は EventEmitter と似ています。イベントは on メソッドで追加され、off メソッドで削除され、clear メソッドでクリアされます。

'mitt' から mitt をインポートする

定数エミッター = mitt()

// イベントをリッスンする
エミッター.on('foo', e => console.log('foo', e) )

// すべてのイベントをリッスンする
エミッター.on('*', (type, e) => console.log(type, e) )

// イベントを発生させる
エミッター.emit('foo', { a: 'b' })

// すべてのイベントをクリアする
エミッタ.すべて.クリア()

// ハンドラー参照の操作:
関数 onFoo() {}
emittingter.on('foo', onFoo) // 聞く
emittingter.off('foo', onFoo) // 聞き取りを停止

mitt を new ではなく関数呼び出しの形式でインポートしたことに注意してください。イベントを削除するときは、イベントを定義する関数の名前と参照を渡す必要があります。

基本原則

原理は非常に単純で、マップメソッドを通じて関数を保存することです。削除後、コードは 30 行未満になりました。

デフォルト関数mitt(all)をエクスポートする{
 すべて = すべて || 新しい Map();

 戻る {
  全て、

  on(タイプ、ハンドラ) {
   const ハンドラ = all.get(type);
   const が追加されました = handlers && handlers.push(handler);
   (!追加)の場合{
    all.set(type, [ハンドラ]);
   }
  },

  オフ(タイプ、ハンドラ) {
   const ハンドラ = all.get(type);
   if (ハンドラ) {
    handlers.splice(handlers.indexOf(handler) >>> 0, 1);
   }
  },

  出力(タイプ、イベント) {
   ((all.get(type) || [])).slice().map((handler) => { handler(evt); });
   ((all.get('*') || [])).slice().map((handler) => { handler(type, evt); });
  }
 };
}

Vue3 では、インスタンスから $on、$off、$once メソッドが完全に削除されました。 $emit は、親コンポーネントによって宣言的にアタッチされたイベントをトリガーするために使用されるため、引き続き既存の API の一部です。

これで、コンポーネント通信に mitt.js を使用する Vue3.x に関するこの記事は終了です。Vue3.x mitt.js コンポーネント通信に関する関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3における非親子コンポーネント通信の詳細な説明
  • Vue3における7種類のコンポーネント通信の詳細
  • Vue3 がコンポーネント通信に mitt を使用する手順
  • vue3 コンポーネント通信方法の概要と例

<<:  Linuxグループの基礎知識ポイントまとめ

>>:  MySQLにインデックスを追加する方法

推薦する

FileZilla Server の FTP サーバー構成と 425 エラーおよび TLS 警告の解決策の詳細な説明

123WORDPRESS.COM では、FileZilla のダウンロード リンクを提供しています:...

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

/******************** * 仮想ファイルシステム VFS **********...

流星効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスで流星の特殊効果を表示するための具体的なコードを参考まで...

Rails APIを使用してReactアプリケーションを構築するための詳細な手順

目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...

単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)

この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が ...

Ajax は CORS レスポンス ヘッダーを設定してクロスドメインの問題を解決し、クロスドメインのケース スタディを実現します。

1. クロスドメインを実現するためにCORSレスポンスヘッダーを設定するクロスオリジンリソース共有...

MySQL 8.0.18 のインストールと設定方法のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.18のインストールと設定のグラフィックチュートリアルを記...

MacOS で Docker を使用して MySQL マスター スレーブ データベースを作成する方法

1. MySQLイメージを取得するターミナルから最新のMySQLイメージを取得するdocker pu...

フロントエンド開発一般マニュアル(ツール、Webサイト、経験などを含む)

今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...

マルチコア CPU を使用して Linux コマンドを高速化する方法 (GNU Parallel)

非常に大量のデータ(数百 GB)を計算する必要があったことはありますか?または、その内部を検索したり...

ROS2のインストールとdocker環境の使い方について

目次Docker を使用する理由は何ですか? DockerのインストールROSイメージを取得するRO...

MySQLチュートリアルDMLデータ操作言語の例の詳細な説明

目次1. データ操作言語 (DML) 2. データを追加する(挿入) 3. 既存のテーブルをコピーし...

6つの珍しいHTMLタグ

まず: <abbr> または <acronym>これら 2 つの記号は同じ意...

Linux exa コマンド (ls よりも優れたファイル表示エクスペリエンス)

インストールREADMEに従ってインストールしてくださいドキュメントには、exa は Rust で実...

最もよく使われるHTMLエスケープシーケンス

HTML では、<、>、& などは特別な意味を持ち (<、> はリン...