据我了解,Redux 是将 UI 的所有状态保存在一个商店中(以便能够轻松重现某些状态并且没有副作用)。您可以通过触发减速器的触发操作来操纵状态。
我目前正在编写一个类似博客的小型应用程序,您可以在其中简单地创建和编辑帖子。我有一个用于创建帖子的对话框,组件的render
方法大致App
返回如下内容:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
我的问题是:对话框的状态(打开或关闭)应该是 App 组件的状态对象的一部分吗?因此,打开和关闭对话框应该通过操作触发,而不是执行以下操作:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
whereonTriggerCreatePostDialog
是通过“创建”按钮上的一些点击侦听器触发的。
通过动作来做这件事对我来说似乎有点奇怪,因为它引入了一种“间接”。
但是,假设我想为编辑操作重用对话框,我必须能够从组件结构中更深的元素打开对话框,例如从Post
组件的子组件中打开对话框PostList
。我可以做的是通过属性将onTriggerCreatePostDialog
函数向下传递到层次结构props
,但这对我来说似乎很麻烦......
因此,最终也是关于不在直接父子关系中的组件之间进行通信。还有其他选择吗?我应该以某种方式使用全局事件总线吗?我目前很不确定。