Задать вопрос

Почему не срабатывает Shallow сравнение в функции connect?

Подключаю компонент к стору так:
const mapStateToProps = (store, ownProps) => ({
    userIsFollowable: store.users[ownProps.userId].isFollowable,
    groupIsFollowable: store.groups[ownProps.groupId].isFollowable
});

export default connect(mapStateToProps)(FollowLinks);


В документации redux-connect написано что если свойства не меняются, то ререндера не будет, в функции connect есть проверка, которая производит неглубокое сравнение объектов. И соответственно React PureComponent использовать вместе сconnect нет смысла. Однако у меня в проекте с React Native это не работает. Вот:

5cdece5930f2e135826099.png

Здесь видно что в компоненте, отображающем сущность с id 43223470435 поля userIsFollowable (false) и groupIsFollowable (true) не меняются, так же не меняется userId и groupId. Однако с каждым запросом на сервер, когда стор пополняется вновь загруженными данными (другими сущностями), компонент перерисовывается.
Пробовал кэшировать в reselect - не работает.

Однако если переделать компонент с функции на React PureComponent, то все работает правильно, перерисовки не происходит при добавлении элементов в стор.

В чем может быть дело? Есть какие-то идеи?

П.С. Прошу обратить внимание на то, что PureComponent предотвращает ререндер, то есть вариант, что я подписал компонент на "лишние" поля, которые меняются незаметно для меня, исключен.
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы