在reducer里面,给出一个状态对象:
var state = {
"data": [{
"subset": [{
"id": 1
}, {
"id": 2
}]
}, {
"subset": [{
"id": 10
}, {
"id": 11
}, {
"id": 12
}]
}]
}
如您所见,数据是一个嵌套数组,每个元素都有数组。
知道action.indexToUpdate将是数据的索引,我想以编程方式将数据[action.indexToUpdate] .subset更新为新数组。例如,如果action.indexToUpdate = 0,则数据[0]将从
更新[{"id":1},{"id":2}]
到
[{"id":4},{"id":5}]
为了做到这一点,我有:
let newSubset = [{"id":4},{"id":5}]
let newState = update(state.data[action.indexToUpdate], {
subset: {
newSubset,
},
})
但是当我执行此操作时,它会返回错误:
TypeError: value is undefined
关于更新功能。
我一直在看这里的反应:https://facebook.github.io/react/docs/update.html但我无法弄清楚如何去做。请指教!
答案 0 :(得分:11)
您的更新将如下所示
var obj = {"state" : {
"data": [{
"subset": [{
"id": 1
}, {
"id": 2
}]
}, {
"subset": [{
"id": 10
}, {
"id": 11
}, {
"id": 12
}]
}]
}}
return update(obj, {
"state" : {
"data": {
[action.indexToUpdate]: {
"subset": {
$set: [newSubset]
}
}
}
}
})
如果子集中有其他字段,但您只希望更改包含其他键的特定索引处的字段,则应编写
return update(obj, {
"state" : {
"data": {
[action.indexToUpdate]: {
"subset": {
[id]: {$merge: newSubset}
}
}
}
}
})