С Object.assign ()
Метод Object.assign()
копирует все перечисляемые собственные свойства из одного или нескольких объектов source в объект target .
Object.assign(target, ...sources)
target
Целевой объект - к чему применять свойства источников, который возвращается после его изменения.
sources
Исходный объект (ы) - объекты, содержащие свойства, которые вы хотите применить.
Object.assign () - JavaScript | MDN
Если вы не хотите изменять предоставленный элемент, выберите целевой объект. Таким образом, el
и дополнительные данные в третьем аргументе будут назначены новому объекту, вместо переопределения свойств el
.
this.setState(prevState => ({
...prevState.map,
areas: prevState.map.areas.map(el =>
el._id === area._id
? Object.assign({}, el, {
chooseDevice: false,
editModal: true
})
: Object.assign({}, el, { chooseDevice: false })
)
}));
с расширением объекта (компактным)
Если вы хотите сделать их более компактными, вы также можете превратить их в разворот объекта и использовать встроенный оператор if для условного изменения в editModal
.
this.setState(prevState => ({
...prevState.map,
areas: prevState.map.areas.map(el => ({
...el,
chooseDevice: false,
editModal: el._id === area._id ? true : el.editModal
}))
}));
EDIT: this.state
не следует использовать в setState