【问题标题】:React Redux Components Communication PatternReact Redux 组件通信模式
【发布时间】:2017-11-08 22:02:21
【问题描述】:

在使用 React 和 Redux 时,我正在寻找一种好的代码模式来允许组件之间进行一些通信。

正如许多文章所建议的那样,这种通信很可能应该通过 redux 完成。 (例如one)。

但是,在某些情况下,使用 store 而不是将其用于状态管理会有点麻烦。这些特殊情况通常是当您需要向组件发出命令时,例如showhide

我举个例子:

假设我们有一个<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


【解决方案1】:

React 和 Redux 世界通常鼓励将应用的行为表示为状态。例如,您可以在某处保存一个标志值{modalVisible : true},而不是命令式的$("#someModal").show() 命令。

有许多使用状态来驱动模式和弹出窗口的示例。一个典型的实现会将单个模态或模态列表的值存储在某处(在父组件中或在 Redux 中)的状态中,然后根据这些值适当地渲染模态组件,例如:{type : "notificationPopup", level : "warning", message : "Something happened!"}。无论您是将数据存储在 React、Redux、MobX 还是其他东西中,基本方法都适用。

有关具体示例,请参阅 Dan Abramov 对 "How can I display a modal dialog in Redux?" 的回答、Dave Ceddia 的文章 "Modal Dialogs in React"、文章 "Scalable Modals with React and Redux"。我的React/Redux links listReact Component Patterns#Modal DialogsRedux Techniques#UI and Widget Implementations 部分还有其他文章演示了模态管理。

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 2021-01-28
    • 2018-05-31
    • 2017-01-03
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多