2016-07-21 16 views
3

Hey, ich habe ein Textfeld/FormControl, das ein Feld in einem JSON in this.state aktualisieren soll. Ich habe mich gefragt, ob es einen besseren Weg gibt, onChange zu machen?Handle Änderung von FormControl Reagieren

<FormControl 
    type='text' 
    placeholder='enter' 
    defaultValue={this.state.form.name} 
    onChange={this.handleChange.bind(this, 'name')} 
/> 
</FormGroup> 

`

handleChange(change, event) { 
    var toChange = this.state.form; 
    toChange[change] = event.target.value; 
    this.setState({form: toChange}); 
    } 
+0

Was möchten Sie über den Event-Handler verbessern? Es sieht ziemlich gut aus. Eine Sache, die Sie vielleicht in Erwägung ziehen sollten, ist, den Staat nicht zu mutieren. Sie könnten etwas wie 'this.setState ({form: {... this.state.form, [ändern]: event.target.value}})' machen. Dies ist notwendig, wenn Sie 'shouldComponentUpdate' aus Performancegründen irgendwann implementieren. – amann

+0

So etwas! Danke –

+0

Ich bekomme unerwartetes Token auf dem ersten. in ... –

Antwort

6

die handleChange Methode wie unten optimieren. (Ersetzen Sie 'Benutzername' durch den Feldnamen, den Sie mögen ...)

<FormControl 
    type='text' 
    name='username' 
    placeholder='enter' 
    defaultValue={this.state.form.username} 
    onChange={this.handleChange.bind(this)} 
/> 
</FormGroup> 

handleChange(event) { 
    let fieldName = event.target.name; 
    let fleldVal = event.target.value; 
    this.setState({form: {...this.state.form, [fieldName]: fleldVal}}) 
    } 
Verwandte Themen