2016-10-20 11 views
0

以下は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); 
     }); 
}, 

認証サービスは、このように定義されています

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} 
/> 

答えて

1

UserNameFieldは同じコンポーネントであることを仮定しますauthコールバックとして、再レンダリングをトリガーする状態を設定し、値を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)と同じです。

+0

これは私が試した最初のもので、うまくいかなかった。 Auth.signupはサービスからFormコンポーネントにインポートされます。これはおそらくcatch関数で "this"が未定義になっている理由です...しかし、Formコンポーネントにreshuflingするのが理にかなっています。 – Stefan

+0

@Stefan es6の矢印機能を使用します。今ここで定義する必要があります。更新された答え。 –

+0

これは、 "解析エラー:プロパティの割り当ては、パターンを破棄する際にのみ有効です"と表示されます。矢印機能について学ぶだけではなく、ステージ0をインストールして動作させ、また、バベル反応をプリセットして、すべての作業をブラウジング、ギャルプ、そしてそのものとする...私は他のコンポーネント/設定? – Stefan

関連する問題