В данном случае ошибка в была в кейсе reducer'a EditTodo. В reducer'е необходимо возвращаться новое состояние, а не редактировать старое. После исправлений код выглядит так:
case EDIT_TODO: {
const index = state.todos.findIndex((todo) => todo.id == action.payload.id);
const newTodos = [...state.todos];
newTodos[index] = action.payload;
return { ...state, todos: newTodos };
}
2 строка - находим индекс редактируемого элемента
3 строка - создаём новый массив на основании предыдущего состояния
4 строка - изменяем редактируемый элемент уже нового массива
5 строка - возвращаем созданное состояние