【发布时间】:2017-11-08 22:02:21
【问题描述】:
在使用 React 和 Redux 时,我正在寻找一种好的代码模式来允许组件之间进行一些通信。
正如许多文章所建议的那样,这种通信很可能应该通过 redux 完成。 (例如one)。
但是,在某些情况下,使用 store 而不是将其用于状态管理会有点麻烦。这些特殊情况通常是当您需要向组件发出命令时,例如show 或hide。
我举个例子:
假设我们有一个<Tooltip /> 组件,它所做的只是呈现一些帮助图标,单击该图标时会打开一个工具提示弹出窗口。
假设我们在一个页面中有多个,但我们要确保在给定时间只有一个是打开的。因此,如果工具提示 A 打开,并且用户单击工具提示 B,则 B 应该打开而 A 应该关闭。
以下是我认为可能与实现此要求相关的一些模式:
使用 Redux:我们可以在 store 中拥有这些工具提示的某种状态:
{
showTooltip: "A" // the ID of the tooltip to show
}
这意味着我们必须 connect 工具提示到 redux 存储,并检查每个工具提示的 ID 是否是应该打开的,当用户点击工具提示图标时,我们发送一个动作到设置打开的工具提示。
使用额外的事件机制:我们可以对 Redux 使用额外的事件机制,例如 emitter。
在这种情况下,我们可以在工具提示即将打开时触发一个事件,并且所有其他工具提示在收到此类事件后都可以侦听并隐藏自己。
我不得不说,在我看来,也许在应用程序中有两个事件机制似乎有点多余,但另一方面,使用 redux store 与组件进行通信似乎有点矫枉过正。
很想听听关于这个问题的一些意见。
【问题讨论】:
-
有很多方法可以解决这个问题。使用 redux 只是其中之一。如果您需要在商店中打开哪个工具提示,那很好,并且该方法有效。您也可以使用普通 React 来解决它,其中父组件保存所有工具提示的状态并仅呈现必要的那个
标签: reactjs redux components communication