如何处理Flux中的异步错误?

jas*_*ero 8 reactjs reactjs-flux

我一直在和Flux合作,我真的很享受,但我有一点我无法想出什么是最好的解决方案.我创建了一个处理订单列表的应用程序,列表中的每个订单都分为不同的组件,这些组件可以具有读取/编辑模式(基本上变成小形式)并触发更新(订单中的产品列表,发货成本等).

订单列表通量

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

我能想到的唯一两个选择是:

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

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

    b)如果用户在不改变值的情况下点击保存并且组件处于"加载状态",即使呼叫成功,订单也保持不变,因此没有退回以退出"加载状态".

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

Ada*_*one 3

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

对于该错误将来可能在多个地方变得相关的可能性,选项 2 会更加稳健。但如果您确信这种情况不太可能发生,那么与选项 1 相比,我认为增加复杂性并没有什么优势。