2017-06-15 46 views
0

我在一個組件中有一個星期幾的收音機組。如果用戶已經有一天與他們的賬戶關聯,那麼我希望這是選中/選中的單選按鈕。因此,如果他們之前保存過「星期一」,我會從父項中獲取並將其存儲在狀態中,並希望在頁面呈現時選擇它。React.js - 如何設置選中/選中的單選按鈕並跟蹤onChange?

我試圖將它設置成類似於它在React Forms中所做的選擇,但它似乎不適用於Fieldset。有任何想法嗎?

constructor(props) { 
    super(props); 
    this.state = { 
    reportWeekday: "monday" 
    } 
} 

    handleWeekdayChange(event){ 
    this.setState({reportWeekday: event.target.value}); 
    console.log(event.target.value); 
    } 

    <fieldset className="schedule-weekday" value={this.state.reportWeekday} onChange={this.handleWeekdayChange}> 
    <label for="sunday"><input type="radio" name="schedule-weekly-option" value="sunday" id="sunday" />Sunday</label> 
    <label for="monday"><input type="radio" name="schedule-weekly-option" value="monday" id="monday" />Monday</label> 
    <label for="tuesday"><input type="radio" name="schedule-weekly-option" value="tuesday" id="tuesday" />Tuesday</label> 
    <label for="wednesday"><input type="radio" name="schedule-weekly-option" value="wednesday" id="wednesday" />Wednesday</label> 
    <label for="thursday"><input type="radio" name="schedule-weekly-option" value="thursday" id="thursday" />Thursday</label> 
    <label for="friday"><input type="radio" name="schedule-weekly-option" value="friday" id="friday" />Friday</label> 
    <label for="saturday"><input type="radio" name="schedule-weekly-option" value="saturday" id="saturday" />Saturday</label> 
    </fieldset> 
+1

我不確定我對你的問題有一個很好的回答,但我想評論讓你知道,作爲道具傳遞你的初始狀態通常不被認爲是一個好主意:[見這裏(https://medium.com/@justintulk/react-anti-patterns-props-in-initial-state-28687846cc2e)。您可能想要在componentDidMount()中設置該初始狀態信息。希望有所幫助! – yoursweater

回答

1

這裏是沒有的類屬性強尼的解決方案使。

class ControlledRadios extends React.Component{ 
    constructor(){ 
    super() 
    this.state = { 
     reportWeekday: 'monday' 
    } 
    } 

    handleWeekdayChange(event) { 
    this.setState({reportWeekday: event.target.value})  
    } 

    render() { 
    let {reportWeekday} = this.state 
    return (<fieldset onChange={this.handleWeekdayChange.bind(this)}> 
     <label><input type="radio" name="schedule-weekly-option" value="sunday" checked={reportWeekday === 'sunday'}/>Sunday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="monday" checked={reportWeekday === 'monday'}/>Monday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="tuesday" checked={reportWeekday === 'tuesday'}/>Tuesday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="wednesday" checked={reportWeekday === 'wednesday'}/>Wednesday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="thursday" checked={reportWeekday === 'thursday'}/>Thursday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="friday" checked={reportWeekday === 'friday'}/>Friday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="saturday" checked={reportWeekday === 'saturday'}/>Saturday</label> 
    </fieldset>) 
    } 

} 
1

好像在多個同名uncontrolled單選按鈕設置defaultChecked如你所期望不工作,由於某種原因onChange只(使用[email protected])每不受控制的單選按鈕觸發一次,因此您可能需要通過設置checked來切換到controlled輸入。

class ControlledRadios extends React.Component { 
    state = { 
    reportWeekday: 'monday' 
    } 

    handleWeekdayChange = (event) => { 
    this.setState({reportWeekday: event.target.value}) 
    } 

    render() { 
    let {reportWeekday} = this.state 
    return <fieldset onChange={this.handleWeekdayChange}> 
     <label><input type="radio" name="schedule-weekly-option" value="sunday" checked={reportWeekday === 'sunday'}/>Sunday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="monday" checked={reportWeekday === 'monday'}/>Monday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="tuesday" checked={reportWeekday === 'tuesday'}/>Tuesday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="wednesday" checked={reportWeekday === 'wednesday'}/>Wednesday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="thursday" checked={reportWeekday === 'thursday'}/>Thursday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="friday" checked={reportWeekday === 'friday'}/>Friday</label> 
     <label><input type="radio" name="schedule-weekly-option" value="saturday" checked={reportWeekday === 'saturday'}/>Saturday</label> 
    </fieldset> 
    } 
} 
+0

你好,Jonny,我得到一個語法錯誤:'state = {'reportWeekday','monday' }''意外的標記',我猜你啓用了尚未成爲規範一部分的類屬性。 –

+1

您需要使用['babel-preset-stage-2'](http://babeljs.io/docs/plugins/preset-stage-2/)預設或['babel-plugin-transform-class-屬性'](https://babeljs.io/docs/plugins/transform-class-properties/)插件(預設包含)來啓用此語法。 –

相關問題