Переменные, содержащие примитивные типы, всегда будут указывать на фактическое значение.Поэтому, если вы передадите его другой переменной, другая переменная получит новую копию этого значения.
Однако объекты и массивы всегда передаются по ссылке.Так что если вы передадите Object или Array другой переменной, они оба будут ссылаться на один и тот же исходный объект.Если бы вы изменили любую из этих переменных, ссылающуюся на оригинал, это также изменило бы исходный объект / массив.
Чтобы обойти это, вам нужно создать новую копиюМассив.Вы можете сделать это в простом javascript следующим образом:
const initialState = [
{
id: 1,
name: "category 1",
items: [
{name: "item 1", id: 1},
{name: "item 2", id: 2}
]
},
{
id: 2,
name: "category 2",
items: [
{name: "item 3", id: 3},
{name: "item 4", id: 4}
]
},
{
id: 3,
name: "category 3",
items: [
{name: "item 5", id: 5},
{name: "item 6", id: 6}
]
}
]
const newState = [...initialState, newDataObject]
newState - это вновь созданный массив с копиями initialState
с newDataObject
, помещенным в последний индекс массива newState
.
РЕДАКТИРОВАТЬ: Я видел, как вы обновили свой вопрос с вашим редукторным редуктором.В настоящее время вы возвращаете объект, который ссылается на начальное состояние:
return {
...state,
categories
}
Вместо этого он должен возвращать новый объект с категориями, поднятыми к нему.Вы можете использовать es6 Object.assign()
для объединения двух объектов, и он вернет совершенно новый Объект, содержащий оба.
Измените выписку о возврате на:
return Object.assign({}, state, categories)