Я думаю, что там кэширование. Ну то есть прям мемоизация происходит. И он проверяет, если значения на вход, которые уже были, то отдает результат без просчётов заново
При каждом изменения сторы выполняется селектор - функция внутри useSelector. Потом useSelector смотрит на результат и если он отличается от предыдущего, то ререндерит компонент.