У меня чрезвычайно вложенное состояние, и я пытаюсь обновить поле внутри объекта в массиве параметров.
const INITIAL_STATE = {
player1: {
name: null,
options: [{
A: null
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null
B: {
isUse: null,
amount: null
extra: {
X: null,
Y: null
}
}
}]
},
player2: {
name: null,
options: [{
A: null
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null
B: {
isUse: null,
amount: null
extra: {
X: null,
Y: null
}
}
}]
},
}
Например, если задано name = "player1 2 B"
и value = "cheese"
, я могу обновить состояние .player1.options [2] .b моего массива опций с:
const keys = name.split(" ");
const player = keys[0]
const idx = keys[1]
const field = keys[keys.length - 1]
return merge({}, state, {
[player]: {
...[player],
options: state[player].options.map((option, i) =>
i === idx ? { ...option, [field]: value } : { ...option }
)
}
- Как мне сделать это более динамичным c, чтобы иметь возможность обновлять поле state.player1.options [1 ] .B.extra?
- Что, если после лишнего было другое вложение?