Вызов setState заменяет старый объект состояния новым. Изменения в обоих случаях вы делаете в старом.
Префиксный инкремент работает, так как в вызов setState передается значение увеличенное на единицу, постфиксный инкремент возвращает значение до увеличения.
В любом случае, мутировать объект состояния неправильно, это противоречит идеологии react и может вызвать ошибки в других местах.
Правильный вариант:
this.setState(prevState => ({ counter: prevState.counter + 1 }));
На последок добавлю, что
++this.state.counter
не эквивалентно
this.state.counter + 1
. Префиксный инкремент эквивалентен записи:
this.state.counter += 1
или:
this.state.counter = this.state.counter + 1
Постфиксный, что-то вроде этого:
(this.state.counter = this.state.counter + 1, this.state.counter - 1)