在 React 组件和服务之间进行通信的最佳实践是什么?

IT技术 rest reactjs redux flux microservices
2021-05-05 00:43:45

React 组件应该如何与服务通信,而不是使用flux/redux 架构?

例如: 有一个容器几乎没有代表性(react)组件:

  1. ChatBox - 能够读/写消息
  2. 带有密码更改器的 AvatarBox - 可以更改用户的密码
  3. 新闻流 - 列出新闻并对它们应用过滤器

将它们视为资源表示,我希望它们中的每一个都可以自己访问微服务 API(获取或更新数据)。这个对吗?它将提供干净的责任管理模型,但使用 http 请求加载每个组件的内容会产生性能问题

这个问题也涉及到:如何为多个(微)服务执行高效的通信?

2个回答

当您选择不使用 Flux/Redux 时,您可以这样做:

创建一个应该包装所有其他组件外部组件。该组件也称为高阶组件控制器视图这个组件应该使用一个 HTTP 库来与你的微服务进行通信(我个人喜欢Axios)。我建议您创建一个包装 Axios 的客户端 API 对象。您的高阶组件可以引用此客户端 API,因此它与 HTTP 库和诸如此类的东西无关。我还将windowdevmode 中对象上放置此客户端 API 的引用,以便您可以window.clientApi.fetchSomething()在其中Chrome console进行操作并使调试更容易。

让所有其他组件(客舱,AvatarBox和NewsStream)控制如果你不熟悉这个概念,这意味着他们通过props接收他们需要的一切并且他们避免保持状态。这些组件不应该调用微服务本身。这是高阶组件的责任。为了具有交互性,这些组件应该接收事件处理程序作为props的功能。

这个对吗?它将提供干净的责任管理模型,但使用 http 请求加载每个组件的内容会产生性能问题

您可以通过不允许每个组件直接联系微服务来避免性能问题如果您的高阶组件编译了所有需要的信息并尽可能少地进行 HTTP 调用,那么您应该完全可以使用这种方法。

通常建议使用 Flux/Redux,但如果您选择退出,这就是如何去做。

根据:https : //facebook.github.io/flux/docs/overview.html#content

有时我们可能需要在层次结构中添加额外的控制器视图以保持组件简单。这可能有助于我们更好地封装与特定数据域相关的层次结构部分。

这就是我正在考虑的特定组件域的责任(描述了其中三个)。那么制作三个可以访问依赖 API 来管理资源数据的控制器视图(或存储)是否可靠?