2016-09-19 8 views
0

私は、ユーザーの性別をチェックするラジオボタンのグループを持っています。react.jsのラジオボタンを検証する方法は?

これはラジオボタンのマークアップです。

export default class Gender extends React.Component { 
    genderRow(gender) { 
     return (
      <Radio onBlur={this.props.validate} key={gender.id} name="gender" value={gender.id} label={gender.text} onChange={this.props.onChange}/> 
     ) 
    } 
    render() { 
     let genderError; 
     if(this.props.errors.gender) { 
      genderError = <span className="has-error">Gender is required</span> 
     } else { 
      genderError = null; 
     } 
     return (
      <div> 
       {genderError} 
       {this.props.gender.map(g => this.genderRow(g))} 
      </div> 
     ) 
    } 
} 

onBlur次の関数を呼び出しようとしています。

validate(event) { 
     let name = event.target.name; 
     let errors = this.state.errors; 
     if(!event.target.value) { 
      errors[name] = true; 
      this.setState({ errors: errors }) 
     } 
    } 

問題は次のとおりです。ラジオボタンは制御されたコンポーネントであるため、常に真理値があります。つまり、!event.target.valueをチェックすると、falseを返します。ユーザーが実際に値を選択しなくても起こっています。あなたのonChangeハンドラで

+1

あなたは何をしようとしているのかは正確にはわかりませんが、できませんか?event.target.checked? – jordaniac89

+0

私はそれが動作しないという考えを持って、それを試してみるつもりです。私はそれを最初に試したいと思うtho。 –

+0

OKそれは動作します。ありがとうございました。 –

答えて

0

、それがチェックされた状態に設定があります。

onChange: function() { 
    this.setState({checked: !this.state.checked}) 
} 

をその後に、あなたの検証を調整します

validate(event) { 
    let name = event.target.name; 
    let errors = this.state.errors; 
    if(!event.target.checked) { 
    errors[name] = true; 
    this.setState({ errors: errors }) 
    } 
} 
+1

だから私はあなたの提案とコメントの一つと一緒に遊んだ。これは私のために働いているものです。私は自分のonChangeを変更する必要はありませんが、それはチェックされたものとは対照的に、まだ値をチェックできます。これは良いことです。なぜなら、私は1つ以上のコードを変更する必要がないからです。しかし私はラジオボタンのための別のバリデーターを持って、値とは対照的にチェックをチェックする必要があります。 –

0

は実際VIEWで反応します。だから、Angularのような検証機能が豊富に組み込まれていないことを知っておくべきです。あなたが計画で多くの検証をしているのであれば、すでにこれについてもっと高度なツールを検討する必要があります。例 - バックボーンモデルと反応してreact-backbone(実際の例と同じように)

関連する問題