NGRX处理获取/创建/删除错误

时间:2017-03-27 10:31:04

标签: javascript angular ngrx ngrx-effects

我有一个减速器,它目前存储product的状态。我有当前的州结构:

{
    draft: {},
    loading: false,
    error: false
}

我的问题是如何在用户创建/删除产品时支持处理错误?我不想使用相同的loading / error属性来获取/创建/删除 - 它们可能需要同时发生。我是否最好创建单独的缩减器,例如createProductReducer / deleteProductReducer / getProductReducer,或者将错误/加载移动到他们自己的errorReducer /' loadingReducer`中? / p>

1 个答案:

答案 0 :(得分:1)

作为一个基本的经验法则:reduce不包含任何逻辑,并且包含(在大多数情况下)语义相关的数据。

简而言之:我不建议您将productReducer拆分为多个缩减器。

其次,我建议您重新考虑数据流,如果真的需要将一次性事件(在您的情况下出错)作为应用程序状态的一部分。在大多数情况下,这不是必要的。

以下是我通常如何处理这个问题:

<强>错误: 任何外部操作(REST,db-calls等)都是通过调用服务方法的效果来完成的。如果发生错误 - 效果返回一个动作(例如ERROR_ACTION),该动作仅由某个根组件处理以显示错误(通过actions$.ofType(ERROR_ACTION)...) - 没有减速器或效果侦听此动作(除非有一些日志服务涉及)。

正在加载:有一个reducer(uiReducer)有一个加载计数器(loading-event starts:+1; loading-event finish / errors:-1)和a只要计数> 1,根组件(加载指示符)就可见。 0