【问题标题】:React + Flux change state while executing actionReact + Flux 在执行动作时改变状态
【发布时间】:2015-05-30 15:32:46
【问题描述】:

我很想将错误数据添加到存储中。例如,

var store = {
      error: {msg:'',info:{}},
      others: '',
      etc: ''
}

在应用程序中出现错误时,操作将通过调度程序更新错误,并且错误面板将显示给用户。错误面板的渲染通过测试错误消息状态有条件地显示 div。

在下一个用户输入时,一个动作,即 userAction,模型状态将由调度程序更新。 问题:仍然会显示错误面板,因为错误消息状态不是“重置”。

userAction 将设置其他非错误状态。 Flux 将针对此更改发出更改。然而,如果我遵循 Flux 模型,也应该在此操作中重置错误,但这会导致发出通知,通知 UI 进行更新。似乎不正确。

我的想法是: 1.不要把这种东西放在店里?要么, 2. store 会为每一次非错误的状态更新重置错误状态。要么, 3. 每个动作还将包含一个用于任何状态更新的错误状态对象。

目前我的解决方案是清除 store 函数中的错误数据:

}, function(payload){
    API.setError({msg:'',info:{}});

    switch(payload.actionType){
        case "BRANCH_SELECTED": 

这样做的非惯用方式是什么? 我是 React 和 Flux 的新手,所以我确定这是新手问题。我使用 McFly 作为 Flux 实现。

【问题讨论】:

  • 好吧,如果我是一个非白痴以非白痴的方式处理这个问题,我想我可能会定义如何清除或不清除每个操作的错误数据的行为,而不是在注册回调的顶部,用于所有操作。但我经常怀疑我是不是白痴。 :) 存储逻辑可能应该确定应用程序的状态是否错误,除非这是来自服务器的错误,或者来自 JS 中抛出和捕获的错误。
  • 您说的是一般错误还是异步类型错误?如果它只是 404 之类的东西,并且您想向用户显示它,您可以只将错误保持在状态。我对 Bootstrap 模态和模态组件做了类似的事情,我只是将错误作为道具传递给模态并显示它。如果您需要做的不仅仅是显示它并响应错误,它可能会更复杂。
  • cmets、fisherwebdev 和 SleepyProgrammer 都让我认为我走的是正确的道路。谢谢!

标签: reactjs reactjs-flux flux


【解决方案1】:

尽管您的问题可能已经在 cmets 中得到解答:我在当前的 React 项目中思考了一个类似的问题,因此我将分享我的经验和结果。我正在使用 fluxxor 而不是 McFly 但这在这里不重要。

由于通量存储应该包含所有应用程序状态和逻辑,我得出的结论是,如果您在存储函数中以编程方式有条件地清除错误状态,那么就通量架构而言,这绝对没问题 .

在我的理解中,将与特定存储相关的错误状态处理保持在该存储中是有意义的(因此可能由少数侦听组件接收和呈现)。正如 @fisherwebdev 所提到的,存储逻辑应该确定错误的状态,特别是基于它向其注册回调函数的操作类型。在您的情况下,请考虑发送 BRANCH_SELECTION_ERROR 类型的操作,该操作会导致设置错误状态。另一方面,BRANCH_SELECTED 操作类型应始终清除此状态。

我的具体解决方案实际上是调用“私有”存储函数clearErrorMessages()clearFormValidationMesssages(),它们只是根据当前调度的操作清除状态变量。

全局错误,即与应用程序状态相关的错误,如服务器通信超时,可能会进入某些“appStore”并以类似的方式更新或清除。所以例如路由器转换可能会导致全局错误状态被清除。

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2017-01-25
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多