2017-03-15 2 views
9

Ich bin es gewohnt, einen globalen Event-Bus zu verwenden, um Cross-Component-Methoden zu behandeln. Zum Beispiel:Wie sollte ich mit Ereignissen in Vuex umgehen?

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

Allerdings baue ich ein größeres Projekt, das globale Zustandsverwaltung erfordert. Natürlich möchte ich Vuex verwenden.

Während dieses Busmuster mit Vuex funktioniert, scheint es falsch. Ich habe Vuex als Ersatz für dieses Muster empfohlen.

Gibt es eine Möglichkeit, Methoden in Komponenten von Vuex auszuführen? Wie soll ich das angehen?

Antwort

12

Vuex und event bus sind zwei verschiedene Dinge in dem Sinne, dass vuex den zentralen Status Ihrer Anwendung verwaltet, während der Ereignisbus für die Kommunikation zwischen verschiedenen Komponenten Ihrer App verwendet wird.

Sie können vuex Mutationen oder Aktionen von einer Komponente ausführen und auch Ereignisse aus den Aktionen von vuex auslösen.

Als docs sagt:

Aktionen zu Mutationen ähnlich sind, ist der Unterschied, dass:

  • Statt den Zustand mutiert, Aktionen Mutationen begehen.
  • Aktionen können beliebige asynchrone Operationen enthalten.

So können Sie ein Ereignis mit dem Bus von Aktionen erhöhen und Sie können eine Aktion von jeder Komponente Methode aufrufen.

+1

Also die Verwendung von Bus und Vuex zur gleichen Zeit ist ein OK-Muster? Scheint zu widersprechen, was in den Dokumenten gesagt wird, aber ich werde damit für jetzt rollen :) Danke! –

+0

Ja, meiner Meinung nach können Sie beide zusammen verwenden, abhängig vom Anwendungsfall. Einmal kann die gesamte Funktionalität von Event Bus by Vuex ersetzt werden, aber für einen einfachen Anwendungsfall (Kommunikation zwischen zwei Komponenten, Trigger-Methode einer anderen Komponente, etc.) können Sie Event-Bus verwenden, während für eine Stelle, wo Sie eine Variable durch mehrere Komponenten benötigen Wenn Sie alles ändern, können Sie vuex verwenden. – Saurabh

+0

@ Blue_Dragon360 Ich hatte mit dem gleichen Problem zu kämpfen, dann stieß ich auf diesen Beitrag, der im Wesentlichen dasselbe wie Saurabh sagt. https://forum.vuejs.org/t/bus-vs-vuex/6679 –

Verwandte Themen