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にインデックスを追加する方法

推薦する

Docker を使ってゼロから SOLO 個人ブログを構築する方法

目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

Prometheus+Grafanaによるnginxの監視方法を分析する

目次1. ダウンロード2. nginxとnginx-vts-exporterをインストールする3. ...

Vueソースコード解析における仮想DOMの詳しい説明

なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...

Dockerイメージのインポートとエクスポートの実装

GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...

css-loader を使用して vue-cli で css モジュールを実装する

【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

ウェブページ HTML 特殊記号 HTML 特殊文字比較表

特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...

CentOS 6.2 に MySQL 5.7.28 をインストールするチュートリアル (mysql ノート)

1. 環境整備1.MySQLインストールパス: /usr/local 2. CentOS 6.2 ...

MySQL IFNULL判定問題の解決方法

問題: mybatis によって返される null 型のデータが消え、フロントエンドの表示にエラーが...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

MySQL の中国語ソートの詳細と例

MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...

CSSトランジションは高さを変更することで要素を拡大したり縮小したりします。

一般的な開発ニーズとして、要素の一部を必要になるまで折りたたんでおきたいことが挙げられます。 Boo...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

Portainer を使用して複数の Docker コンテナ環境を管理する方法を説明します。

目次Portainerは複数のDockerコンテナ環境を管理します2. Dockerを管理する2.1...