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