2016-07-08 1 views
0

ログインフォームを検証し、子コンポーネントからpropsとして渡されたエラーを動的に表示しています。 Object.assignを使用してエラーオブジェクトを設定すると、errorTextはフィールドの下に表示されません。 setState()を使用すると、errorTextが表示されますが、stateのerrorsオブジェクトはすべてのエラーで更新されません。私はこれがsetState()の非同期性と関係していると考えています。Material-UI TextField errorTextがObject.assignで状態を設定しても表示されない

login_page.js(親要素)

constructor(props) { 
     super(props); 

     this.state = { 
      login: { 
       userName: "", 
       password: "" 
      }, 
      errors: {} 
     }; 
    } 

    loginFormIsValid() { 
     var formIsValid = true; 
     this.setState({ 
      errors: {} 
     }); 

     if (this.state.login.password === "") { 
      Object.assign(this.state, { 
       errors: Object.assign(this.state.errors, {password: "Password is required"}) 
      }); 
      formIsValid = false; 
     } 

     if (this.state.login.userName === "") { 
      Object.assign(this.state, { 
       errors: Object.assign(this.state.errors, {userName: "Username is required"}) 
      }); 
      formIsValid = false; 
     } 

     return formIsValid; 
    } 

login_form.js(子コンポーネント)

<form 
    <TextField 
     name="userName" 
     errorText={this.props.errors.userName} /> 
    <br /> 
    <TextField 
     name="password" 
     errorText={this.props.errors.password} /> 
    <br /> 
    <RaisedButton 
     label="Log in" 
     type="submit" /> 
</form> 

任意のヘルプは高く評価されるようにIが反応/材料-UIの初心者くさいです。

答えて

1

setStateを使用して(Object.assignではなく)状態を変更します。あなたが状態を更新しているとき。また、Object.assignの使用だけで何が変わったのか交換し、新しいプロパティを設定するSETSTATEを使用すると

var newErrors = Object.assign(this.state.errors, {password: "Password is required"}); 

のようになります。

Object.assign(newObject, ...objectsToCopyFrom) 

です。

this.setState({ errors: newErrors }); 
+0

私は自分のコードを更新しましたが、ERRORTEXTはまだ表示されない... – devly

+0

は申し訳ありませんが、一日Reduxの中で働いて少し誤解します。私は自分の答えを更新しました:setStateを使ってコンポーネントの状態を更新してください。 –

+0

それはうまくいった!どうもありがとうございました。 – devly

関連する問題