У меня возникло несколько проблем с производительностью в моем приложении «Реакция / редукция».
Я работаю с объектом в одном из моих редукторов, который довольно глубокий. Он содержит объект с именем list
, который содержит коллекцию объектов.
const state = {
list: {
one: {
id: 'one',
name: 'One',
active: false
},
two: {
id: 'two',
name: 'Two',
active: false
}
}
}
Каждый элемент в объекте используется для визуализации компонента. Этот компонент будет иметь доступ к свойствам элемента следующим образом:
const List = (props) => {
const listItems = Object.keys(props.list).map((key) => {
const item = props.list[key];
return (
<Item key={item.id} active={item.active}>
{item.name}
</Item>
);
});
return <ul>{listItems}</ul>;
};
Однако каждый раз, когда я запускаю следующий код, мой компонент (который является PureComponent) рендерится.
case UPDATE_LIST_ITEM:
return {
...state,
list: {
...state.list,
[payload.itemId]: {
...state.list[payload.itemId],
},
},
};
В документации Redux упоминается, что "каждый уровень вложенности должен быть скопирован и обновлен соответствующим образом", однако я даже не обновляю никакие значения, а просто копирую объект.
Я не уверен, что здесь можно сделать. Это хорошее время для реализации библиотеки, как Immutable.js?
Обновление:
Также (я не слишком уверен, помогает ли это, но), следующее обновление с использованием редуксов не вызывает рендеринг моего компонента:
case UPDATE_LIST_ITEM:
return {
...state,
list: {
...state.list,
[payload.itemId]: state.list[payload.itemId],
},
};