2017-08-05 35 views
3

我有一个API,可能会返回一个错误。以简单的形式,组件读取如下。问题是,当发生错误时,关闭/清除错误消息的步骤是什么?如何清除来自Redux动作的错误消息

class LoginError extends Component { 
    render() { 
     return (
      { 
       this.props.error != null ? 
        <h2>this.props.error</h2> : 
        undefined 
      } 
     ) 
    } 
} 

const mapStateToProps = (state) => { 
    return { 
     error: state.error 
    }; 
} 


export default connect(mapStateToProps, null)(LoginError); 

回答

1

有没有直接的方法来做到这一点,你基本上有两种选择:错误设置为未定义在减速时,另一个动作火灾,或提供使用可重复使用的误差分量上的错误本身关闭按钮,调度一个动作,将错误设置为reducer中未定义的。

就我个人而言,我一直使用第一种方法,让我们以表单的提交为例。当用户提交表单时,您会触发form-submit/request并显示加载消息。如果表单发送正确,您将触发form-submit,如果发生错误,则触发form-submit/error,在减速器中设置错误。然后在form-submit/request中清除错误,以便用户在发生错误时获得反馈,但如果再次提交表单,错误将被清除。如果您在提交表单时不想做任何事情,这很奇怪,您可以在发起form-submit时清除错误。这种方法的缺点是,例如,如果您想在表单的任何字段发生更改时清除错误,则必须添加另一个操作,并使错误对于该操作未定义。

现在,如果您在错误组件中放置了一个关闭按钮,您可以重新使用错误React组件,但必须为每个API调用都有一个action/dismiss-error操作,并将该错误设置为reducer上未定义的每个他们,这可以很快变得非常乏味。

对我来说最好的方法是使用第一种方法,但要仔细选择为每个页面或部分显示多少错误。通过这种方式,每个页面都可以显示其错误部分,以便与页面关联的任何API调用显示,并且您只需要针对每个页面执行错误操作,而不是针对每个API调用。

+0

嘿马可,谢谢你的提示。如果我遵循第一个选项,这意味着错误消息仍然存在,直到用户更正数据并重新提交为止,从UX角度来看,这样做是否可行? – nomadus

+0

@nomadus我认为在大多数情况下,它是可以的。但是,随着用户体验的发生,您总能获得更多更多的细节。 –

1

Quote from docs:

一个存储存放应用程序的整个状态树。 改变其内部状态的唯一方法是在其上发送一个动作。

就是这样。如果你保持某种状态,然后改变它的值,你必须发送一个动作。