【问题标题】:How to handle async errors in Flux?如何处理 Flux 中的异步错误?
【发布时间】:2015-04-15 18:37:08
【问题描述】:

我一直在使用 Flux,我真的很享受,但有一点我无法确定最佳解决方案。我做了一个处理订单列表的应用程序,列表中的每个订单都分为不同的组件,可以具有读取/编辑模式(基本上变成小形式)并触发更新(订单中的产品列表,运输费用等)。

除了我必须在订单更新时处理来自服务器的异常情况(例如,用户更改了其中一个产品数量但库存不足,我希望组件显示该表单的情况)之外,一切正常该特定订单的特定产品显示内联消息,因此我必须将错误消息传递给非常特定的组件。列表最多可以有 50 个订单,每个订单由 4-5 个可以触发更新的组件组成,所以我可以拥有大约 200 个可能对 ORDER_UPDATE_FAILED 操作感兴趣的组件。

我能想到的只有两个选项:

  1. 使组件同步调用 API 更新,以便它可以在错误发生时检索错误(更新的订单将作为 ORDER_UPDATED 操作的有效负载发送,并通过正常的 Flux 流保持其流动:调度程序、存储、触发器更新)。但我知道这有点打破 Flux 哲学
  2. 异步进行更新并创建一个 ORDER_UPDATE_FAILED,并且 Store 具有将转换放入错误中的逻辑,该对象可以由 Order Part 组件识别(考虑 orderID + errorID)。这将保持数据的单向循环和动作的异步性,但感觉过于复杂和繁琐,并增加了一些问题:

    a) 如果错误存储在 Store 中,则组件必须在错误不再有效时通知 Store,这可能无法始终这样做。

    b) 如果用户在没有更改值的情况下点击保存,并且组件进入“加载状态”,即使调用成功,顺序也保持不变,因此不会重新渲染以退出“加载状态”。

有没有人找到更优雅的方法来解决这个问题?

【问题讨论】:

    标签: reactjs reactjs-flux


    【解决方案1】:

    我认为选项 1 有意义且更易于管理,只要错误仅在该组件的范围内相关。我一直在使用这种方法来显示用户注册等表单提交的错误,我知道我需要错误消息的唯一地方是直接在表单上(“该用户名已被使用”)。我将这种错误消息视为表单/组件本身的一部分,更多的是本地状态而不是应用程序状态。这听起来很像你的情况,所以我会说这是更好的选择。

    选项 2 对错误可能在未来不止一个地方变得相关的可能性更加稳健。但是,如果您确信这不太可能发生,我认为与选项 1 相比,增加的复杂性没有优势。

    【讨论】:

    • 很高兴在这里看到选项 1,因为这对我来说也是有意义的...我在提交表单时遇到了非常相似的情况,不期待再做一个当我真的只关心该表单上下文中的服务器错误时,存储等。绝对是 Flux/React 不明显的东西。
    猜你喜欢
    • 2018-07-04
    • 2015-02-22
    • 2015-07-18
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多