1You need to pass the event object to handleDelete function when you make use of Arrow function as done in your implementation.
2
3You can think of an arrow function like a function that calls another function to which you need to pass the arguments. Event object is a parameter to the arrow function and you indeed need to pass this on to the handleDelete function
4
5onClick={(e) => this.handleDelete(e, i)}
6However after this change you still need to bind the deleteTodos function in the parent, since the context of this inside this function won't be that of the React class component, you can do it like
7
8deleteTodos = (i) => {
9 var lists = this.state.listArr;
10 lists.splice(i, 1);
11 this.setState({listArr: lists})
12 }
13or
14
15constructor(props){
16 super(props);
17 this.state = {
18 listArr: [],
19 }
20 this.deleteTodos = this.deleteTodos.bind(this);
21 }