使用 get API 调用反应全局状态/道具(没有 Redux)

Posted

技术标签:

【中文标题】使用 get API 调用反应全局状态/道具(没有 Redux)【英文标题】:React global state/props with get API calls (without Redux) 【发布时间】:2018-05-08 03:11:42 【问题描述】:

我有一个运行多个 API 调用的 React 组件。在初始加载时,会运行默认 API 调用。

从默认的 API 调用中,我需要保存状态,比如说从一个名为 since_launch 的属性。在组件上运行后续 API 调用时,since_launch 状态会丢失,因为它在后续 API 调用中不可用。我需要保存 since_launch 状态,以便我可以使用它来确定其余 API 调用的逻辑。

该应用程序不使用 Redux,因此这不是保存全局状态的选项。作为一种解决方法,我使用本地存储在初始加载时保存了 since_launch,但这感觉不对。任何想法都将不胜感激或澄清我想要实现的目标根本不可能。

【问题讨论】:

您是否更新了每个不同 API 调用的整个状态? 是的,使用 Recompose 在每次调用时通过 props 更新整个状态 你为什么要这样做?使用它对您有什么好处吗? 为什么不使用 redux? 因为它是一个相对简单的应用程序,这将是使用 Redux 的唯一用例,所以看起来有点矫枉过正 【参考方案1】:

应用程序不使用 Redux,因此这不是保存全局状态的选项

使用为多个 React 组件检索数据并在它们之间共享/操作数据似乎需要使用 flux-data stream,而 redux 是它的最佳实现。此外,由于 API 调用始终是异步的,只有 redux 是不够的 - 您还应该使用流程管理器,例如 redux-saga,这是建议任务的事实标准。

如果你不喜欢redux 并且想使用自定义解决方案(这很奇怪),只需编写一个 Provider 和简单的流程管理器。 Provider 应该存储共享状态并通过Context 机制在组件之间分发。简单的流程管理器应该是该全生命周期组件中的中间件功能,并在队列中获取 API 调用的结果。 (但结果是你将重新发明类似https://github.com/freeman-lab/minidux 的东西)

无论如何,不​​管你是否使用redux,每个 React 组件,除了一个 - PageProvider - 应该是没有自己状态的功能组件。在另一种情况下,使用React 的好处将会丢失。

【讨论】:

以上是关于使用 get API 调用反应全局状态/道具(没有 Redux)的主要内容,如果未能解决你的问题,请参考以下文章

反应孩子正在通过道具改变父母状态......我不清楚原因

您如何在控制台中检查反应元素的道具和状态?

通过在反应中获取 API 获得空值和实际结果

传递给子组件时道具未定义(反应钩子)

将新的商店状态放入道具后,反应不会重新渲染

即使道具没有改变,为啥还要对重新渲染组件做出反应?