Каждый раз рендер разделяет состояние на текущее и предыдущееда, примерно так, там реакт мемоизирует и сравнивает состояние и пропсы с помощью внутреннего механизма Fiber. Есть статья интересная на эту тему, как там вообще сравнения под капотом устроены вот