【问题标题】:Application vs. local state in reduxredux 中的应用程序与本地状态
【发布时间】:2016-05-04 19:12:55
【问题描述】:

在许多 Redux 示例中,SOME_ASYNC_ACTION_ERRORSOME_ASYNC_PENDING 是被调度以操纵全局状态的操作。我想不出这样一个场景,一个组件最初以全局错误/加载/挂起状态呈现是有意义的。当组件被销毁并重新挂载时,需要“清除”该异步错误,这使得操作组件的 本地状态 似乎是一个更好的选择。

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

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

【问题讨论】:

    标签: javascript reactjs redux


    【解决方案1】:

    据我了解,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

    【讨论】:

    • 正确,这一切都假设connect 被用于将适当的应用程序状态映射到组件——我应该指定这一点。问题仍然存在,错误/未决状态。
    • 我在上面编辑了我的答案以进一步涵盖这一点,我应该从一开始就解决这个问题
    • 而且...如果您认为卸载组件后“错误”状态不应该存在,那么您需要查看导致 Redux 存储更新导致 React 的操作重新渲染导致您的组件被卸载。您的组件不会无缘无故地自行卸载。他们这样做是因为 Redux 存储由于操作而被修改。很可能您需要一个 reducer 来清除错误状态以及它所做的任何其他操作。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2017-02-03
    • 2018-02-16
    • 2018-05-13
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多