redux中的应用程序与本地状态

Who*_*hoa 6 javascript reactjs redux

在许多Redux示例中,SOME_ASYNC_ACTION_ERROR或者SOME_ASYNC_PENDING是调度以操纵全局状态的操作.我想不出这样一种场景,即最初使用全局错误/加载/挂起状态呈现组件是有意义的.当一个组件被销毁并重新安装时,该异步错误需要被"清除",这使得它看起来像操纵组件的本地状态是一个更好的选择.

考虑到这一点,在Redux中处理加载/错误/挂起状态的最佳实践是什么:

  • 组件是否应在本地默认为初始状态,但是仍然订阅加载/错误的全局应用程序状态?
  • 或者在离开组件后是否应重置错误/加载的应用程序状态?
  • 或者这些暂时的国家是否应该在当地进行管理?

Aar*_*ron 4

根据我的理解,Redux 中的最佳实践是始终将应用程序存储在全局存储中,然后让您的各个组件使用connect(mapStateToProps)(Component). loading因此,您的各个组件将订阅相关标志,而不是拥有全局应用程序属性,例如users.loading

有关更多信息,请参阅http://rackt.org/redux/docs/basics/UsageWithReact.html

编辑:为了进一步回答您的问题,每个操作都应该通过调度另一个操作来自行清理。因此,您可能会REQUEST_USER添加一个加载标志并重置错误状态,然后是RECEIVE_USER,它会删除加载标志,或者FAILED_TO_RECIEVE_USER,它会删除加载标志,但会添加一个错误状态。这种模式在这里有非常详尽的描述:https://github.com/agraboso/redux-api-middleware#redux-standard-api-calling-actions

  • 而且...如果您认为卸载组件后“错误”状态不应该继续存在,那么您需要查看导致 Redux 存储更新的操作,该操作导致 React 重新渲染,从而导致您的组件被卸载。您的组件不会无缘无故地自行卸载。他们这样做是因为 Redux 存储由于某个操作而被修改。最有可能的是,您需要一个减速器来执行该操作,除了执行其他操作之外,还可以清除错误状态。 (3认同)