2017-08-02 50 views
7

我有一個簡單的任務,我試圖完成:每當單選按鈕在組之間切換時觸發一個函數。無線電輸入onChange只會觸發一次?

class App extends Component { 
    onButtonClick() { 
     console.log('something was clicked!') 
    } 

    return (
     <div> 
     <button onClick={this.onButtonClick.bind(this)}> 
      Click me 
     </button> 
     <input 
      type="checkbox" 
      onChange={this.onButtonClick.bind(this)} 
     /> 
     <input 
      type="radio" 
      value="yes" 
      name="answer" 
      onChange={this.onButtonClick.bind(this)} 
     /> 
     <input 
      type="radio" 
      value="no" 
      name="answer" 
      onChange={this.onButtonClick.bind(this)} 
     /> 
     </div> 
    ) 
} 

按鈕和複選框工作得很好。如果你點擊它,它會多次觸發該功能。單選按鈕觸發一次然後停止。

就好像ReactJS由於某種原因停止收看單選按鈕的onChange一樣。任何幫助將不勝感激。謝謝!

UPDATE

現在看來似乎正常工作在https://codesandbox.io/s/rGMGzJNL,但不是在我的本地環境,這是完全令人費解的正常工作。如果我知道發生了什麼,將會更新,但如果有人遇到過這種情況,希望得到任何指導!

+0

嘗試移動處理程序綁定到構造'this.handleWeddingRsvp.bind(這)' – Umesh

+0

不遺憾的是改變任何東西。讓我以我的榜樣來幫助說明問題。 – BenCodeZen

+0

嘗試使用'onclick'作爲你的事件 - 在原生JS你不能使用'onchange' https://stackoverflow.com/questions/8838648/onchange-event-handler-for-radio-button-input-type-radio -doesnt-work-as-one – Toastrackenigma

回答

11

您需要在每個無線電臺上設置選中的屬性並將狀態保存爲無線電狀態。

class App extends Component { 
    state = { 
    radio: 'yes', 
    } 

    onButtonClick() { 
    console.log("something was clicked!"); 
    } 

    onRadioChange(value) { 
    console.log("radio change"); 
    this.setState({ 
     radio: value, 
    }) 
    } 

    render() { 
    return (
     <div> 
     <button onClick={() => this.onButtonClick()}> 
      Click me 
     </button> 
     <input type="checkbox" onClick={() => this.onButtonClick()} /> 
     <input 
      type="radio" 
      value="yes" 
      name="answer" 
      checked={this.state.radio === 'yes'} 
      onChange={(e) => this.onRadioChange('yes')} 
     /> 
     <input 
      type="radio" 
      value="no" 
      name="answer" 
      checked={this.state.radio === 'no'} 
      onChange={(e) => this.onRadioChange('no')} 
     /> 
     </div> 
    ); 
    } 
} 
+0

我有一種感覺,這是對onChange檢測方式的誤解。感謝澄清這一點! – BenCodeZen