Explain "Create a Controlled Input" Challenge

Tell us what’s happening:
I’ve solved this challenge with no issue, but am having some trouble understanding how it works.

Here’s my (obviously incorrect) understanding of how this works:

this.state.input is set to a blank string …
the input’s “value” attribute is set to this.state.input (which is a blank string by default) …
when there’s a change (onChange) then call the handleChange method …
the handleChange method then updates this.state.input to be equal to the input’s “value” attribute …

My point is that I don’t understand where the program is getting the data for what’s typed in the box from. Which part of the program is accessing that data?

Thank you in advance :grin:

  **Your code so far**

class ControlledInput extends React.Component {
constructor(props) {
  super(props);
  this.state = {
    input: ''
  };
  // Change code below this line
  this.handleChange = this.handleChange.bind(this)
  // Change code above this line
}
// Change code below this line
handleChange(event) {
  this.setState({
    input: event.target.value
  });
}
// Change code above this line
render() {
  return (
    <div>
      { /* Change code below this line */}
      <input value={this.state.input} onChange={this.handleChange}/>
      { /* Change code above this line */}
      <h4>Controlled Input:</h4>
      <p>{this.state.input}</p>
    </div>
  );
}
};
  **Your browser information:**

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36

Challenge: Create a Controlled Input

Link to the challenge:

The value attribute contains the data, i.e. what you type. Letting the onChange handler set it through a state variable is what makes it a controlled component.

1 Like