【问题标题】:ReactJS recieving form errors from serverReactJS 从服务器接收表单错误
【发布时间】:2016-10-20 17:49:58
【问题描述】:

下面是我在 React 中的注册功能。如何渲染从后端收到的错误?我试图将 this.setResponse 放入 catch 部分……但没有用。我知道 componentWillReceiveProps 应该处理更新,但这是来自服务(也在下面)而不是来自父组件的更新。

如果我打印错误,我可以看到有错误的字典,但我看不到如何将它们传递给表单或字段以进行渲染。

signup(evt) {
    evt.preventDefault();
    ...
      Auth.signup(dict)
        .catch(function(err) {
            alert("There's an error signing up");
            console.log(err.response);
      });
},

Auth 服务的定义如下:

signup(dict) {
    console.log(dict);
    return this.handleAuth(when(request({
        url: UserConstants.SIGNUP_URL,
        method: 'POST',
        type: 'json',
        data: dict
    })));
}

我希望将错误发送到以下字段:

<UserNameField
    ref="username"
    responseErrors={this.responseErrors}
/>

【问题讨论】:

    标签: reactjs error-handling


    【解决方案1】:

    假设UserNameField 与身份验证回调在同一个组件中,您只需设置将触发重新渲染的状态并将值作为道具传递给UserNameField

    signup(evt) {
        evt.preventDefault();
        ...
          Auth.signup(dict)
            .catch((err) => {
                alert("There's an error signing up");
                console.log(err.response);
                this.setState({error: err});
          });
    },
    
    <UserNameField
        ref="username"
        responseErrors={this.responseErrors}
        error={this.state.error}
    />
    

    这与.bind(this) 相同。

    【讨论】:

    • 这是我尝试的第一件事,没有奏效。 Auth.signup 是从服务导入到 Form 组件的,这可能就是为什么在 catch 函数中未定义“this”的原因......但我看看将它重新放入 Form 组件是否有意义。
    • @Stefan 使用 es6 箭头函数。这应该现在定义。更新了答案。
    • 现在它说:“解析错误:属性分配仅在解构模式中有效”。不知道 tath 是什么意思,只是了解箭头功能,但我确实安装了 stage-0 并且可以正常工作,还有 babel-react 预设,并且所有这些都适用于 browserify、gulp 和那些东西......我是否错过了其他一些组件/设置?
    • 一旦我改变了它就起作用了:signup(evt) { 可能是因为注册也收到了参数..我刚才读到了类似箭头上方的内容..如果你用这个改变更新你的回复,我标记一样正确。非常感谢!
    • @Stefan 已更新,但 = () =&gt; 确实可以使用参数。我认为这可能与您如何定义组件有关。我使用这种语法:class MyClass extends React.Component { signup = (evt) =&gt; { } } 它可以工作。
    猜你喜欢
    • 2020-12-22
    • 2017-07-02
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2018-03-05
    • 2018-02-04
    相关资源
    最近更新 更多