我有一个对象:
{ //birthdaysObject
'2000':{
'January':
[{
name: 'Jerry'
},
{
name: 'Chris'
}]
},
'2001':{
'February':
[{
name: 'John'
}]
}
当我去更新redux存储时,它用我发送给我的reducer的新对象替换了整个年份(例如'2000')对象。
如何在不替换整个年份对象的情况下推送嵌套的对象数组?
我的减速器目前看起来像:
return Object.assign({}, state, {
...state,
birthdays: Object.assign({}, state.birthdays, {
...state.birthdays,
...birthdays
})
});
...birthdays
是另一个对象,其格式与第一个代码段相同。
我也乐于接受有关数据结构,规范化等方面的建议。
任何帮助将不胜感激。
birthdaysObject中的对象键是未知的,并在遍历单独的对象时分配。我已经尝试过kolodny/immutability-helper,但是$merge
函数返回的结果与我的reducer已经执行的结果相同。
答案 0 :(得分:1)
前段时间我遇到了同样的问题。 按照我做的方式。 您有一个对象,但我认为您应该有一个对象数组。 我在变量上也有不同的名称,但是理解逻辑应该不是问题
//do a copy of the array first
let newSubscriptions = state.customer.master.subscriptions.slice();
//for the value you want to change, find it's position in the array first
const indexInSubscriptions = newSubscriptions.map(function(item) {
return item.id;
}).indexOf( action.id);
//get the child you want to edit and keep it in a new variable
const under_edit_subscription = state.customer.master.subscriptions[indexInSubscriptions];
//go again over the array and where is the value at the index find above, replace the value
newSubscriptions = newSubscriptions.map((item, i) =>
i === indexInSubscriptions ? under_edit_subscription : item
)
//add the whole array into the state
return {
...state,
customer: {
...state.customer,
master: {
...state.customer.master,
subscriptions : newSubscriptions
}
}
}