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

What is best practice to communicate between React components and services?

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

例如: 有一个容器具有很少的代表性(反应)组件:

  1. ChatBox - 可以发送 read/write 条消息
  2. 带有密码更改器的 AvatarBox - 可以更改用户的密码
  3. 新闻流 - 列出新闻并对其应用过滤器

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

这个问题还涉及到:How to execute efficient communication for multiple (micro)services?

当您选择不使用 Flux/Redux 时,您会执行以下操作:

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

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

Is this correct? It will provide clean responsibility managing models, but it gives performance doubts using http requests to load each component's content

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

通常建议使用 Flux/Redux,但如果您选择退出,这就是解决方法。

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

Occasionally we may need to add additional controller-views deeper in the hierarchy to keep components simple. This might help us to better encapsulate a section of the hierarchy related to a specific data domain.

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