Я использую редукцию с реакцией и машинописью для своего приложения. Я работаю со многими элементами, используемыми в разных местах моего приложения. Мое состояние выглядит так:
{
items: {42: {}, 53: {}, ... }, //A large dictionary of items
itemPage1: {
items: [42, 34, 67, ...],
...
},
itemPage2: { ...
},
...
}
Я хочу написать эффективный редьюсер элементов, но элементы большие, и я не могу каждый раз создавать глубокие копии. Судя по gaearon, мне это не нужно (извлечено из здесь): Redux не требует глубокого клонирования состояния при каждом действии. Он просто просит вас вернуть новые объекты для частей, которые изменились. Вы можете повторно использовать предыдущее состояние для любых частей дерева, которые не изменились. .
Это замечательно! Однако я новичок во всем этом, и я не уверен, как правильно реализовать редуктор. То, что у меня есть до сих пор внутри моего редуктора, это:
case UPDATE_ITEM_LABEL:
return (<any>Object).assign({}, state, {
item_id: (<any>Object).assign({}, state[action.item_id], {
label: action.value
})
})
Таким образом, он копирует все элементы старого состояния в новый объект, а затем объединяет результат с измененным объектом с новым обновленным значением. Я надеюсь, что элементы во время первого assign
передаются по ссылке и поэтому не копируются глубоко? Если это так, то все в порядке, так как я могу позволить себе глубоко скопировать один элемент и несколько простых ссылок для каждого действия. Также я обнаружил, что можно использовать immutable.js для решения этой проблемы, если метод, который я предлагаю, работает, зачем людям использовать immutable.js?