In controlled component, each state mutation have an handler function
class Form extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
this.setState({value: e.target.value});
}
handleSubmit(e) {
alert('Submitted value: ' + this.state.value);
e.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" value={this.state.value} onChange={this.handleChange} />
<input type="submit" value="Submit" />
</form>
);
}
}
Force to uppercase in handler
handleChange(e) {
this.setState({value: e.target.value.toUpperCase()});
}
<textarea> in React use a value attribute
<textarea value={this.state.value} onChange={this.handleChange} />
<select> use a value and not a selected attribute
<select value={this.state.value} onChange={this.handleChange}>
<option value="a">Option A</option>
<option value="b">Option B</option>
</select>
<select> value can have an array for multiple values
<select multiple={true} value={['a', 'b']}>
Handle multiple inputs with name attribute
handleInputChange(e) {
const target = e.target;
const value = target.value;
const name = target.name;
this.setState({
[name]: value
});
}
render() {
return (
<form>
<input name="firstName" onChange={this.handleInputChange} />
<input name="lastName" onChange={this.handleInputChange} />
</form>
);
}