web-dev-qa-db-ja.com

Vue.js $ emitと$ dispatchの違いは何ですか?

Vue2.0では、イベント$dispatchおよび$broadcastは廃止されました。

そして、$dispatch$emitと似ていることがわかりました。

それらの違いは何ですか?移行時に$dispatch$emitに直接置き換えることは安全ですか?.

9
Alfred Huang

いいえ、どこでも$disptach$emitに置き換えることはできません。 childからparentへの通信に使用している場合は、どこでもそれを置き換えることができますが、それ以外の場合は、他のアプローチを取る必要があります。

documentation から( pgrade Tips のEvan youからの同様のコメント):

これらのメソッドの最も一般的な用途の1つは、親とその直接の子の間の通信です。これらの場合、v-onの子供からの$ emitを実際に聞くことができます。これにより、明示性を追加してイベントの利便性を維持できます。

ただし、離れた子孫/祖先の間で通信する場合、$ emitは役に立ちません。代わりに、最も簡単なアップグレードは、集中型のイベントハブを使用することです。

$ dispatch のドキュメントから

イベントをディスパッチし、最初にインスタンス自体でトリガーしてから、親チェーンに沿って上方に伝播します。リスナーがtrueを返さない限り、親イベントリスナーがトリガーされると、伝播は停止します。

一方、 $ emit

現在のインスタンスでイベントをトリガーします。追加の引数は、リスナーのコールバック関数に渡されます。

ご覧のとおり、$dispatchを介して親要素の複数の層に通信を渡す場合、$emit

14
Saurabh