У вас не массив приравнивается к null, а на момент вызова колбека, передаваемого в setState,
SyntheticEvent перестает существовать.
У вас два варианта:
1. Записать значение e.target.value в переменную и передавать в колбек переменную:
handleSubmit = e => {
if (e.keyCode === 13) {
const { value } = e.target;
this.setState(prevState => ({
todoValue: [...prevState.todoValue, value],
}));
e.target.value = '';
}
};
2. Использовать event.persist(), но тогда изменять значение e.target.value надо в колбеке setState, иначе вы перепишите значение раньше его сохранения в state:
handleSubmit = e => {
if (e.keyCode === 13) {
e.persist();
this.setState(
prevState => ({
todoValue: [...prevState.todoValue, e.target.value],
}),
() => {
e.target.value = "";
}
);
}
};
Я бы использовал первый вариант.
Так же, вы должны использовать свойство key в списках:
{this.state.todoValue.map((item, index) => (
<Li key={index} text={item} />
))}
Lists and keys