В первом случае вы используете Object.assign
один раз, и это создает только поверхностную копию.Это означает, что ваш объект копируется только для одного уровня, и все вложенные свойства указывают на одни и те же ссылки.Таким образом, когда вы изменяете его напрямую, Redux не может понять разницу.
В последующем (я полагаю, вы все делаете правильно) вы изменяете свое состояние, не изменяя первоначальное и должным образом.Вы создаете копии своих вложенных свойств с Object.assign
.Это то, что имеет значение.
Для более чистой версии вы можете использовать синтаксис распространения .
return {
...state,
[action.componentDescriptor.name]: {
...state[action.componentDescriptor.name],
[action.id]: {
...state[action.componentDescriptor.name][action.id],
Value: action.value,
}
}
}
Или вы можете нормализовать ваше состояние чтобы избежать множества вложенных мутаций.