2017-04-17 8 views
1

私はボタンをクリックして値を送信しようとしています(状態の変更に使用されます)。私は単純にHTML input要素を使用すれば正常に動作します。しかし、Material UIRaisedButtonを使用すると、値を渡すことができません。私が間違っていることを指摘してください。ReactJSのMaterial UI: `RaisedButton`の` evt.target.value`が動作しません

ボタンクリックで呼ばれています機能:

changeGameStatus = (evt) => { 
    let status = "" 
    switch (evt.target.value) { 
     case "Start": 
      status = "in-progress" 
      break 
     default: 
      status = "ready" 
      break 
    } 

    this.setState({ 
     game: { 
      status: status 
     } 
    }) 

    /*when using <RaisedButton>, this.state.game.status returns "undefined"*/ 
    console.log('new status:' + this.state.game.status) 
} /* END changeGameStatus */ 

render()内側のボタン:

/*this one does not send a value at all*/ 
<RaisedButton onClick={this.changeGameStatus} value="Start" label="Start" primary={true} /> 

/* this one works, but the look is not supported by material-ui*/ 
<input type="button" onClick={this.changeGameStatus} value="Start" /> 
+1

このように、値ont onClickイベントを直接渡すことができます: 'onClick = {()=> this.changeGameStatus( 'Start') } 'RaisedButtonはpropsの' value'を受け付けません。 –

答えて

1

onClickのが材料-UI RaisedButtonため、以来、プロパティとして指定されていませんそれは反応コンポーネントです。あなたが隆起したボタンに提供するプロパティは、コンポーネントへの小道具として渡されます。 onclickが指定されている場合、RaisedButtonコンポーネントでどのように処理されたかによって、イベントのために取得する値が決まります。それが定義されていないので、あなたはちょうどあなたがあなたが手動で関数に渡す必要があり

<RaisedButton onClick={this.changeGameStatus.bind(this, "Start")} value="Start" label="Start" primary={true} /> 

または

<RaisedButton onClick={() => this.changeGameStatus("Start")} value="Start" label="Start" primary={true} /> 

と値を取得することはありません、そこからイベントを取得していますlikeを使用してください

changeGameStatus = (value) => { 
    let status = "" 
    switch (value) { 
     case "Start": 
      status = "in-progress" 
      break 
     default: 
      status = "ready" 
      break 
    } 

    this.setState({ 
     game: { 
      status: status 
     } 
    }) 

    /*when using <RaisedButton>, this.state.game.status returns "undefined"*/ 
    console.log('new status:' + this.state.game.status) 
} 
+0

ありがとうございます!あなたのソリューションは完璧に動作します。私がフォローアップの質問を追加することができれば、上記のコメントでMayank Shuklaが提案した '{()=> this.changeGameStatus( 'Start')}'も動作します。これと '{this.changeGameStatus.bind(this、" Start ")}'の違いは何ですか?また、どちらを適切に使うべきですか?私はReactJSには全く新しく、まったく同じように動作する異なる構文を見つけるのは混乱します。 – ITWitch

+1

私は私の答えで両方のアプローチを追加しました。これらの2つは関数をバインドする方法が異なります。私が知っている限り、これは毎回関数を返します。したがって、矢印構文アプローチを使用することを好むでしょう –

+0

ありがとう説明のために。私の問題は今解決されました。 – ITWitch

関連する問題