React Forms

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

Leave a Reply

Your email address will not be published. Required fields are marked *