在 React 组件和服务之间进行通信的最佳实践是什么?
What is best practice to communicate between React components and services?
不使用 flux/redux 架构,React 组件应该如何与服务通信?
例如:
有一个容器具有很少的代表性(反应)组件:
- ChatBox - 可以发送 read/write 条消息
- 带有密码更改器的 AvatarBox - 可以更改用户的密码
- 新闻流 - 列出新闻并对其应用过滤器
将它们视为资源表示,我希望它们中的每一个都可以自己访问微服务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?
不使用 flux/redux 架构,React 组件应该如何与服务通信?
例如: 有一个容器具有很少的代表性(反应)组件:
- ChatBox - 可以发送 read/write 条消息
- 带有密码更改器的 AvatarBox - 可以更改用户的密码
- 新闻流 - 列出新闻并对其应用过滤器
将它们视为资源表示,我希望它们中的每一个都可以自己访问微服务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?