当前位置: 首页 > Web前端 > JavaScript

关于SAPSpartacusLoaderMetaReducer的用途

时间:2023-03-27 13:45:05 JavaScript

为了给用户更好的反馈,基于他们的行为,我们往往需要保留“正在加载购物车”、“获取用户地址失败”等信息。对于每个单独的应用程序状态,我们必须将元数据与其放在一起。分别用于购物车、用户信息、商品数据等。在所有这些地方手动实现此逻辑将导致在整个代码库中对同一问题采用不同的解决方案。这就是在spartacus中创建loaderReducer的原因。这个reducer规范化了整个状态树的元数据处理。您可以在树的任何深度、任何您想要的地方使用它。除了reducer之外,我们还为操作和选择器提供实用程序。一个例子:在app.module.ts中插入以下代码:这个.actions$.pipe(ofType(CartActions.LOAD_CART),map((action:CartActions.LoadCart)=>action.payload),tap((data)=>console.log('Jerrycart:',data)))。订阅();}}运行时效果:Error是NgRxStore中经常放置的AJAX调用状态之一。其他状态包括Loading、Loaded和Success等。interfaceResultState{result:Result,error:string|null,isLoading:boolean,isLoaded:boolean,}为什么要把这些状态放到Store中呢?好吧,这通常是由用户体验决策驱动的。例如,用户应该能够在等待调用完成时看到某种进度指示器,或者如果调用结果是错误的则显示错误消息。SAPSpartacus使用名为loaderReducer的统一工具reducer为实体加载添加不同的标志:高阶reducer将通用加载标志添加到状态块。它利用动作的“加载器”元字段为特定动作(加载、成功、失败、重置)设置特定标志,将通用加载标志添加到状态块的高阶减速器。它利用“加载器”元操作字段为特定操作设置特定标志(加载、成功、失败、重置)一旦成功加载实体,首先触发高级减速器:注意这行语句:returnObject.assign(Object.assign({},state),{value:reducer?reducer(state.value,action):action.payload,loading:false,error:false,success:true});明确地将状态中的加载字段硬编码为false。这样,应用程序就不需要手动修改加载标志了。更多Jerry原创文章在这里:《王子熙》: