据我理解,Redux 是为了将 UI 状态集中存储在一个仓库中(以便轻松还原某些状态并且不产生副作用)。您可以通过触发触发器来操作状态,从而激活 reducers。
我目前正在编写一个类似博客的应用,用户可以简单地创建和编辑帖子。我有一个用于创建帖子的对话框,App
组件的 render
方法大致返回如下内容:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
我的问题是:对话框的状态(打开或关闭)是否应该是App组件的状态对象的一部分?因此,打开和关闭对话框是否应该通过操作来触发,而不是像下面这样做:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
其中onTriggerCreatePostDialog
是通过某个点击监听器在"创建"按钮或类似按钮上触发的。
对我来说,通过操作来完成这个功能似乎有点奇怪,因为它引入了一种"间接性"
然而,假设我想要重复使用这个对话框以进行编辑操作,我必须能够从组件结构中更深层次的元素打开对话框,例如从作为PostList
组件的子组件的Post
组件中。我可以通过props
属性将onTriggerCreatePostDialog
函数向下传递到层次结构中,但我认为这很麻烦...
所以最终也涉及到在不直接存在父子关系的组件之间进行通信。还有其他选择吗?我应该如何利用全局事件总线?我目前非常不确定。