Ну как я понял - каждый раз после диспатча экшена будет вызываться useSelector и возвращать новый объект, следовательно постоянно будет ререндер, а если через useSelector возвращать простые типы, то они будут сравниваться по значению и если они не поменялись, то ререндера не будет. Если надо возвращать сложный тип из useSelector, то надо юзать reselect, т.к. он позволяет создать мемоизированный селектор, у которого уже не будет проблем со сравниванием двух одинаковых объектов находящихся в разных участках памяти.
Ура
Только
1) Можно возвращать ссылочные типы, если они не создаются внутри селектора, а например находятся в сторе, тогда сравнения по ссылке будут проходить пока не поменяется обьект
2) Реселект не сравнивает обьекты из результата, он сравнивает входные параметры селектора, пока не меняются возвращает старую ссылку, поэтому сравнения по ссылке будут также проходить