Cannot read property 'target' of undefined

The problem is that you are invoking the function in this line:

onChange={this.handleChange()}

All you have to do is simply pass the function as a value to onChange without invoking it.

onChange={this.handleChange}

When you use parenthesis you'd be invoking a function/method instead of binding it with an event handler. Compare the following two examples:

//invokes handleChange() and stores what the function returns in testA.
const testA = this.handleChange()  

vs

//stores the function itself in testB. testB be is now a function and may be invoked - testB();
const testB = this.handleChange 

If you are passing event using an arrow function, you should try the following:

onChange={(e) => handleChange(e)}