在reducer内部,给定一个状态对象:
var state = { "data": [{ "subset": [{ "id": 1 }, { "id": 2 }] }, { "subset": [{ "id": 10 }, { "id": 11 }, { "id": 12 }] }] }
如您所见,数据是一个嵌套数组,每个元素中都有一个数组。
知道action.indexToUpdate将是数据索引,我想以编程方式将data [action.indexToUpdate] .subset更新为新数组。例如,如果action.indexToUpdate = 0,那么data [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
关于更新功能。
我一直在这里查看react ducomentation:https://facebook.github.io/react/docs/update.html,但我真的不知道该怎么做。请指教!
您的更新看起来像
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} } } } } })