javascript - React-Redux 设计模式 : Should a "deep" component be wired to Redux, 或从父组件接收 props?

标签 javascript reactjs redux react-redux flux

我正在前端使用 React 和 Redux 构建一些即时消息应用程序。我有“Main”(初始化网络套接字并呈现其他组件)、“Chat”、“FriendsList”和“Friend”等组件

我经常发现自己想知道,我是否应该将 child 或孙子直接连接到 Redux(假设它需要它),或者从 parent /祖 parent 传递这些 Prop 。

例如,我以这种方式在主组件中渲染“Chat”:

 <Chat
    onTyping={this.onTyping}
    onSubmitMessage={(value) => { this.submitMessage(value) }}
    messages={this.props.messages[this.props.activeFriend] || []}//This comes from Redux
    isMessagingAvailable={this.isMessagingAvailable()}    
  /> 

如您所见,我传递了一个“messages”属性,该属性又来自 Redux。我当然可以独立地将 Chat 连接到 Redux。

那么问题是,在这种情况下是否存在关于最佳实践的一些约定。 每个消耗全局状态的组件都应该直接连接到 Redux 吗?

最佳答案

TL;DR;

模块化设计背后的理念是拥有尽可能多的通用组件。

这些组件应该独立于外部世界(即 Redux Store)。

根据我的理解,任何应用程序的结构都应该是这样的:

  • 您拥有满足其目的的根级组件。如:输入框
  • 然后你就有了一个复合组件,它将使用这些根组件。就像处理错误标签和输入一样。
  • 然后您就形成了高阶组件(HOC)。这些是业务组件,并且具有正在发生的事情的上下文。这些组件应该有权访问 Redux 存储。

示例:

让我们创建一个包含基本信息的表单:

  • 名字
  • 姓氏
  • 年龄
  • 电子邮件

对于这种形式,您需要以下组件:

  • 文本输入组件
  • 具有文本预防/验证逻辑的数字输入组件。

您可以将 textInput 用于 FirstNamelastNameemail。因此,如果你直接将它绑定(bind)到 store,你就会使它依赖于你自己的 redux 结构。因此这些组件不能在其他地方使用。

因此,最好的想法是创建接受 props 并执行其操作的愚蠢组件。


您的用例。

您有以下模块:

  • 主要
  • 聊天
  • 好友列表
  • friend

将来,您计划添加更多模块:

  • 人工智能/机器人聊天
  • 群聊

现在个人、机器人和群聊的聊天窗口将是相似的,但商店结构将很困难。特别是对于群聊。

那么您如何决定应该绑定(bind)哪个组件来存储?

您应该为 View 创建嵌套组件层次结构,并为业务模块创建 HOC。这样,您的 View 组件就不依赖于商店。您的 HOC 将提供数据,这就是它的全部作用。

因此,就您而言,您将拥有以下 HOC:

  • 直接聊天
  • 机器人聊天
  • 群聊
  • 联系人
  • 仪表板

您可以拥有以下 View 组件:

  • 聊天组件:用于所有聊天类型。
  • 联系人组件:用于好友列表/联系人 View
  • 列表组件:用于浏览器联系人、添加成员 View 和管理成员 View 。

关于javascript - React-Redux 设计模式 : Should a "deep" component be wired to Redux, 或从父组件接收 props?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779520/

相关文章:

javascript - Kendo UI ListBox 移除取决于 treeview 检查

javascript - 使用 Jest 获取测试

authentication - 对 Auth 0's lock.on(' 已验证') 事件调度操作

javascript - 在数组中递增单击 Redux 函数

JavaScript 隐藏/显示元素

javascript - 用于使用命名空间解析 XML 的 JavaScript 库?

javascript - 如何执行多个回调并返回结果数组?

css - Navbar 的居中组件

javascript - 在 React 中呈现嵌套/线程评论

javascript - ngrx/redux 操作上下文的最佳实践