01React: Create a Controlled Input

Tell us what’s happening:
I can’t validate this code : " Typing in the input element should update the state and the value of the input, and the p element should render this state as you type."

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(state =>{
  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.bind(this)}/>
       { /* 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/86.0.4240.183 Safari/537.36.

Challenge: Create a Controlled Input

Link to the challenge:

The problem is here:

handleChange(event) {
  this.setState(state =>{
    input: event.target.value; 
  });
}

When you pass a function to this.setState that function has to return a new state.
Your function doesn’t return anything, there is just a block of code.

Look at this example

this.setState(state => {
  const newState = { counter: state.counter + 1 };
  return newState;
}

Alternatively, you can do something like this:

this.setState(state => ({ input: state.counter + 1 });

But we pass a function to this.setState when we want to base the next state on the previous one. In this challenge however there is no need for that, so you can just pass a new state directly:

this.setState({ input: event.target.value });

Thank you for your answer and your explanations