React-Redux设计模式:应该将“深层”组件连接到Redux,还是从父组件接收道具?

布罗德

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

我经常想知道是否应该直接将一个孩子或孙子连线到Redux(假设需要),还是将这些道具从父母/祖父母那里传递出去。

例如,我以这种方式在Main组件中渲染“聊天”:

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

如您所见,我正在传递“消息”道具,该道具又来自Redux。我当然可以将Chat单独连接到Redux。

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

拉杰什

TL; DR;

模块化设计的思想是拥有尽可能多的通用组件。

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

以我的理解,任何应用程序的结构应类似于:

  • 您具有满足其用途的根级组件。喜欢:input box
  • 然后,您将拥有一个复合组件,它将消耗这些根组件。像处理错误标签和输入一样。
  • 然后,您将形成高级订单组件(HOC)。这些是业务组件,具有发生情况的上下文。这些组件应有权访问Redux存储。

例:

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

  • 名字
  • 年龄
  • 电子邮件

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

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

您可以使用textInputFirstNamelastNameemail因此,如果直接将其绑定到存储,则将使其依赖于您自己的redux结构。因此,这些组件无法在其他任何地方使用。

因此,最好的主意是创建可以接受道具并完成任务的笨拙组件。


您的用例。

您具有以下模块:

  • 主要
  • 聊天室
  • 好友清单
  • 友人

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

  • AI /机器人聊天
  • 群聊

现在,个人聊天,机器人聊天和群组聊天的聊天窗口将相似,但是商店结构将变得困难。尤其适用于群聊。

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

您应该为视图创建嵌套的组件层次结构,并为业务模块创建HOC。这样,您的视图组件就不依赖于存储。您的HOC将提供数据,仅此而已。

因此,在您的情况下,您将具有以下HOC:

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

并且您可以具有以下视图组件:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章