我想知道在Vuejs中实现组件之间共享状态的最佳实践。
想象一下情况A:你有一个显示模态的网络应用程序。模态具有布尔状态show
。如果单击模态确定按钮,则此状态应更改,但如果单击后台的任何部分,甚至可能在某些服务器上推送状态更改。因此,模态应该能够像父应用程序一样改变状态。
情况B:您有一个Web应用程序,它显示共享公共数据value
的不同组件内的输入字段。如果用户通过一个组件中的字段更改value
,则还应在另一个组件中更新。两者都应该更新服务器推送事件。
问题:
答案 0 :(得分:4)
A :对于模态组件,我说show
应该是道具。所以父组件可以随心所欲地控制模态。在这种情况下,根本没有共享状态。
模态本身并不需要了解有关服务器的任何信息。如果道具show
为true
,则只显示模态,反之亦然。
我认为遮罩层是模态的一部分,所以当单击遮罩时,模态会发出一个事件。父组件接收事件并可以决定隐藏模态或不显示。
Vue在这里有一个官方模态示例(感谢@craig_h提及):https://vuejs.org/v2/examples/modal.html
B :只需将vuex状态绑定到输入。没错。
请注意,并非所有组件都需要直接访问vuex存储。对于一些纯UI组件,只需使用props。因此,父组件有权控制它们并提高灵活性。
我建议你阅读这些文档:
是的,这些是React / Redux文档。由于Vue相对年轻,反应社区有更多的文档/文章。但Vue和React都是基于组件的库。您如何设计组件的想法基本相同。
您还可以查看此vuex示例:https://github.com/vuejs/vuex/tree/dev/examples/chat
这是一个非常简单的例子,但确实使用了我上面提到的所有内容。发出一个事件,一些纯UI组件......