setState is asynchronous. The event parameter here is a Synthetic
Event and is pooled. The link provided shows a way to make it work, but also, you can simply define a new variable and assign it event.target.value and assign it as input's value. This way, you are capturing the current value of event.target.value and assigning it. The way you have it written now, when the state is updated, the event is no longer relevant.
Note: The other approach is to use the non-functional version of setState. This is fine, since the value of input does not depend on a previous state property’s value.
Can you explain why that works there but this doesn’t work in this lesson? this.setState(state => ({input: event.target.value}));
this line does work: this.setState({input: event.target.value});
on another note… even though the first function call doesn’t work it still passes when you click “Run the Tests” :-p