2017-04-17 74 views
1

我試圖通過按鈕單擊(用於更改狀態)提交一個值。它工作正常,如果我只是使用HTML input元素。但是,如果我使用Material UIRaisedButton,我根本無法傳遞值。請幫我指出我做錯了什麼。ReactJS上的材質UI:`evt.target.value`不適用於`RaisedButton`

這就是所謂的按一下按鈕的功能:

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

你可以直接傳遞值onClick事件像這樣:onClick = {()=> this.changeGameStatus('Start') }'可能RaisedButton不接受道具的'價值'。 –

回答

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

和事件使用它就像

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

我已經在我的答案中添加了兩種方法,這兩種方法都是綁定函數的不同方法,據我所知.bind(this)每次都會返回一個函數,因此我寧願使用箭頭語法方法 –

+0

謝謝爲解釋。我的問題現在解決了。 – ITWitch