Кроме проблемы, с которой вы уже столкнулись, в вашем коде есть ещё одна проблема: не следует обращаться к текущему стейту внутри функции setState, т.к. эта фукнция асинхронная, а значит нет гарантии, что this.state будет тем же самым на момент применения стейта. Звучит сложно, но оно и на самом деле не очень просто устроено. Вот простейший пример в песочнице:
https://jsfiddle.net/n5u2wwjg/147060/
Обратите внимание, что "-2" работает так, как ожидается. А "+2" - нет.