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> ); }