Компонент React будет перерисован, если props
изменился, поэтому ответ во многом зависит от того, как вы создаете props
для рендеринга.
Один простой пример даст вам идею:
const bag = Immutable.List([{name:"bagItem1"}]);
console.log(bag.toJS() === bag.toJS())
<script src="https://facebook.github.io/immutable-js/immutable.js"></script>
Что это значит?Это означает, что если вы сохраните ваш Item[]
с помощью Immutable, а затем отобразите UserComponent
как:
<UserComponent
id={1}
name={"some name"}
bag={store.getIn(["bag", "items"]).toJS()}
/>
Затем при каждой мутации магазина, даже если сумка никогда не менялась, UserComponent
получит новый объект для bag
и принудительно выполнит повторную визуализацию.
Для plain
объектов с возражениями, вы можете использовать React.PureComponent
, что сделает поверхностное сравнение для вас, но если вам нужно передать массив объектов, у вас обычно есть два решения:
реализует shallComponentUpdate
метод для вас Component
, где вы можете сравнить prevProps
с nextProps
вручную и вернуть boolean
, который указывает, будет ли Component
повторно обработан
Не используйте Immutable
для вашего магазина.Целиком!Моя компания сделала это, и мы никогда не сожалеем.(Вы также экономите 150 КБ :))
Чтобы заменить Immutable, вам нужно будет правильно изучить методы структурирования и мутирования хранилища.Есть много хороших статей