Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Vue中使用Vuex和事件总线_Javascript_Vue.js_State_Vuex_Event Bus - Fatal编程技术网

Javascript 在Vue中使用Vuex和事件总线

Javascript 在Vue中使用Vuex和事件总线,javascript,vue.js,state,vuex,event-bus,Javascript,Vue.js,State,Vuex,Event Bus,这个问题在我的脑海里已经隐藏了很长一段时间了。我正在运行一个非常复杂的Vue应用程序,它处理大量必须通信的组件,因此我使用了非常结构化的Vuex设置,利用其模块系统。但是,对于一组特定的组件,例如comments文件夹,即: 评论目录: Comments.vue//总体注释组件 Comment.vue//每个注释的组件 NewComment.vue//用于创建新注释的组件 bus.js//仅为这三个组件保留事件总线 使用此目录中的保留事件总线仅用于这3个组件之间的通信是否可以,或者这被视为“

这个问题在我的脑海里已经隐藏了很长一段时间了。我正在运行一个非常复杂的Vue应用程序,它处理大量必须通信的组件,因此我使用了非常结构化的
Vuex设置,利用其
模块
系统。但是,对于一组特定的组件,例如
comments
文件夹,即:

评论目录:

  • Comments.vue//总体注释组件
  • Comment.vue//每个注释的组件
  • NewComment.vue//用于创建新注释的组件
  • bus.js//仅为这三个组件保留事件总线

使用此目录中的保留
事件总线
仅用于这3个组件之间的通信是否可以,或者这被视为“不当行为”,因为我已经有一个大型vuex系统在运行?

如果您的应用程序非常复杂且比使用vuex更适合状态管理,如果没有,您可以坚持使用道具、事件总线和所有这些工具。

我建议在您的所有应用程序中使用Vuex。这样做可以使你的州保持在一个地方。使用事件总线有损于此,因为现在有两个位置包含状态。更糟糕的是,事件总线的可维护性较差,经常会中断Vue和Vuex(以及其他Flux实现)促进的“单向数据流”

Vuex可用于应用程序状态和应用程序数据。数据是常见的内容,如客户详细信息等。状态为“此侧边栏汉堡菜单已打开”或“此模式已打开”或“用户在列表中选择此项”


这就引出了您的“我只是觉得Vuex应该用于应用程序范围的通信,而不是用于2-3个相邻组件之间的通信”。当你想到它的时候,它是一样的

如果父组件希望与子组件通信,则会向下传递道具。如果孩子希望以一种解耦的方式进行交流,它会发出事件。对于这种情况,这是完全正确的

尝试使用多个嵌套组件来实现这一点<代码>A->B->C->D

想象一下,如果D需要更新B中的某些状态,如何做到这一点,向上发出事件,并耦合组件?哎呀,这不是办法。D应发送Vuex操作,该操作通过存储绑定更新B。当A需要在C中更新某些内容时,该怎么办?现在,您的B组件需要特殊情况下的额外道具,以允许A与C通信,而B应该能够独立存在,而不需要A作为父级。又恶心了!发出一个动作

Vuex的设计目的之一就是在同级组件之间进行通信,甚至在页面的完全不同部分中的组件之间进行通信:应用程序状态


删除事件总线并接受这种方法将使代码更容易维护。

。但是,如果你知道自己在做什么,那就由你决定了。我只是觉得Vuex应该用于应用程序范围的通信,而不是用于2-3个相邻组件之间的通信。。。我对这个实现非常满意,但是,谢谢你的链接@JacobGoh@MikeStrong即使在应用程序中使用Vuex,也可以使用事件总线。但是,您知道,由于vuex是为所有可用组件之间的通信而设计的,因此我认为使用事件总线没有那么重要。但这取决于你,顺便说一句!我的问题是,Vuex是全球性的。假设我有20个评论组件->每个都有10个评论组件。。。为什么/如何使用vuex允许每个唯一的子级->父级彼此通信?每个父->子对的所有突变都将彼此重叠,因为状态由所有组件共享@SanjayWhy您是否认为首先需要使用事件总线而不是普通的Vue事件,特别是如果这些组件具有您刚才解释的直接父子关系?只需使用普通事件。是的,我知道,在这个小查询之前,我的整个应用程序都是vuex管理的。下面是情景。我们登陆用户档案,获取用户帖子并存储在vuex->update ui中,没问题。但是,每个帖子的评论和回复又如何呢?将它们全部存储在一个状态对象中似乎有点奇怪,这并不奇怪,它的工作原理也不奇怪。一组帖子和子帖子。这就是状态管理的要点。@user9993这是一个非常简洁的解释。我只想知道的是,这澄清了我脑海中与国家管理有关的每一点。Thanks@Bsienn不客气,很高兴这有帮助!不要忘了检查Vue不一致。如何仅使用vuex发出事件?不更改状态数据?以及如何对任何不可更改的数据作出反应,我只想使用vuex对某些事件作出反应