我该如何处理Vuex中的事件?

Blu*_*360 23 vue.js vuex vuejs2

我习惯使用全局事件总线来处理跨组件方法.例如:

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

但是,我正在建设一个需要全球国家管理的大型项目.当然,我想使用Vuex.

虽然这种总线模式适用于Vuex,但似乎是错误的.我已经看到Vuex被推荐作为这种模式的替代品.

有没有办法在Vuex中运行组件中的方法?我该怎么做呢?

Sau*_*abh 24

Vuex事件总线是两个不同的东西,因为vuex管理应用程序的中心状态,而事件总线用于在应用程序的不同组件之间进行通信.

您可以从组件执行vuex变异或操作,还可以从vuex的操作中引发事件.

正如文档所说:

行为类似于突变,区别在于:

  • 行动不是改变状态,而是提交突变.
  • 动作可以包含任意异步操作.

因此,您可以通过总线从操作中引发事件,并且可以从任何组件方法调用操作.

  • 那么同时使用总线和vuex是一个好的模式?似乎与文档中的内容相矛盾,但我现在就用它滚动:)谢谢! (5认同)
  • 是的,在我看来,您可以根据用例使用它们.一旦可以替换Vuex的事件总线的所有功能,但是对于一个简单的用例(两个组件之间的通信,另一个组件的触发方法等),您可以使用事件总线,而对于需要多个组件的一个变量的地方所有修改它,你可以使用vuex. (4认同)
  • @ Blue_Dragon360我一直在同一个问题上挣扎,然后我遇到了这个帖子,该帖子本质上说与Saurabh相同。https://forum.vuejs.org/t/bus-vs-vuex/6679 (3认同)
  • 请参阅[this](https://github.com/DivanteLtd/vue-storefront)示例如何使用两者 (2认同)