2017-03-15 17 views
9

グローバルなイベントバスを使用してコンポーネント間のメソッドを処理するのに慣れています。例:Vuexでイベントを処理する方法は?

var bus = new Vue(); 
... 
//Component A 
bus.$emit('DoSomethingInComponentB'); 
... 
//Component B 
bus.$on('DoSomethingInComponentB', function(){ this.doSomething() }) 

しかし、私は大規模なプロジェクトを構築しており、グローバルな状態管理が必要です。当然、私はVuexを使いたい。

このバスパターンはVuexで動作しますが、間違っているようです。私はVuexがの代わりにこのパターンの代わりにとお勧めしているのを見ました。

Vuexのコンポーネントでメソッドを実行する方法はありますか?私はこれにどのようにアプローチすべきですか?

答えて

12

Vuexevent busは、vuexがアプリケーションの中央の状態を管理し、イベントバスを使用してアプリケーションのさまざまなコンポーネント間で通信するという意味で2つの異なる点です。

コンポーネントからvuexの突然変異またはアクションを実行し、vuexのアクションからイベントを発生させることもできます。 docsとして

は言う:

アクションは、変異に似て、違いがあることであること:

  • 代わりに状態を変異の、アクションは変異をコミットします。
  • アクションには、任意の非同期操作を含めることができます。

だから、アクションからバスを介してイベントを発生させることができますし、任意のコンポーネントメソッドからアクションを呼び出すことができます。

+1

バスとvuexを同時に使用することはOKパターンですか?ドキュメントに書かれていることと矛盾しているようですが、今のところロールします:)ありがとう! –

+0

はい、私の意見では、ユースケースに応じて両方を一緒に使うことができます。 Vuexによるイベントバスのすべての機能を一度置き換えることができますが、単純なユースケース(2つのコンポーネント間の通信、別のコンポーネントのトリガ方法など)ではイベントバスを使用できます。すべてそれを変更すると、あなたはvuexを使うことができます。 – Saurabh

+0

@ Blue_Dragon360私は同じ問題で苦労していました。そして、私は本質的にSaurabhと同じことを言うこの記事に出くわしました。 https://forum.vuejs.org/t/bus-vs-vuex/6679 –

関連する問題