我很想将错误数据添加到商店。例如,
var store = {
error: {msg:'',info:{}},
others: '',
etc: ''
}
在应用程序中出现错误时,操作将通过调度程序更新错误,并向用户显示错误面板。错误面板的渲染通过测试错误消息状态有条件地显示div。
在下一个用户输入上,一个动作,即userAction,调度程序将更新模型状态。 问题:错误面板仍会显示,因为错误消息状态未被重置'。
userAction将设置其他非错误状态。 Flux将为此更改发出更改。然而,如果我遵循Flux模型,在此操作中也应该在此处完成错误的重置,但这会导致发出,告知UI更新。似乎不正确。
我的想法是: 不要把这种东西放在商店里吗?要么, 2.存储将为每次非错误状态更新重置错误状态。要么, 3.每个操作还将包含任何状态更新的错误状态对象。
目前我的解决方案是清除商店功能中的错误数据:
}, function(payload){
API.setError({msg:'',info:{}});
switch(payload.actionType){
case "BRANCH_SELECTED":
这种非惯用的做法是什么? 我是React和Flux的新手,所以我确定这是新手问题。我使用 McFly 作为Flux实施。
答案 0 :(得分:0)
虽然您的问题可能已在评论中得到解答:我在当前的 React 项目中冥想了一个类似的问题,因此我将分享我的经验和结果。我正在使用 fluxxor 而不是 McFly ,但这不重要。
由于磁通存储应该包含所有应用程序状态和逻辑,我得出的结论是,它绝对没问题,并且在磁通体系结构意义上,如果您以编程方式在商店功能中有条件地清除错误状态 。
根据我的理解,将错误状态处理与特定商店内的错误状态处理保持在该商店内是有意义的(因此可能由少数监听组件接收和呈现)。正如 @fisherwebdev 所提到的,存储逻辑应该确定错误的状态,特别是基于它注册回调函数的操作类型。在您的情况下,请考虑调度BRANCH_SELECTION_ERROR
类型的操作,该操作会导致设置错误状态。另一方面,BRANCH_SELECTED
操作类型应始终清除此状态。
我的具体解决方案实际上是调用“私有”存储函数clearErrorMessages()
或clearFormValidationMesssages()
,这些函数只是根据当前调度的动作清除状态变量。
全局错误,即以某种方式与服务器通信超时等应用程序状态相关的错误,可能会进入某些“appStore”并以可比较的方式进行更新或清除。所以例如路由器转换可能导致全局错误状态被清除。