我有一个减速器,它目前存储product
的状态。我有当前的州结构:
{
draft: {},
loading: false,
error: false
}
我的问题是如何在用户创建/删除产品时支持处理错误?我不想使用相同的loading
/ error
属性来获取/创建/删除 - 它们可能需要同时发生。我是否最好创建单独的缩减器,例如createProductReducer
/ deleteProductReducer
/ getProductReducer
,或者将错误/加载移动到他们自己的errorReducer
/' loadingReducer`中? / p>
答案 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