Это потому, что NGXS использует deepFreeze
в режиме разработки.Вы можете проверить это следующим образом:
console.log(Object.isFrozen(portal));
Вы можете отключить его, установив developmentMode
в false
при импорте корневого модуля:
NgxsModule.forRoot([], { developmentMode: false })
Но вы не захотитесделать это, так как «замораживание» предотвращает непредсказуемые мутации.
Уничтожение - ваше оружие:
const portal = { ...state.portals.find((portal) => portal.id === state.portalId) };
Также оператор updateItem
может принимать функцию в качестве второго аргумента, когда выможете обновить ваш объект.В результате код становится более декларативным:
ctx.setState(
patch({
portals: updateItem(
portal => portal.id === state.portalId,
portal => {
const newPortal = { ...portal };
newPortal.style.logo = logo;
return newPortal;
}
)
})
);