То, что вы забыли, это правильная сборка массива строк. Попробуйте разбить его так:
const changedElement = {
...state.line[lineIndex],
media: [
...state.line[lineIndex].media.slice(0, action.payload.index),
...state.line[line_index].media.slice(action.payload.index + 1)
]
}
return {
...state,
line: [
...state.line.slice(0, line_index),
changedElement,
...state.line.slice(line_index + 1)
]
}
Что вы хотите сделать, это написать текущую структуру вашего состояния:
state = {
line: [
{
media: []
},
{
media: []
}
]
}
То, что вы можете сделать, это сделать его общим и содержать состояние. Таким образом, state
должен быть копией state
(поместив в нее ...state
), а line
должен быть копией line
. Единственная разница между line
и state
в том, что это массив. Создание неизменяемой копии массива немного сложнее, чем создание такой копии объекта. Но в своем коде вы уже сделали это для своего changedElement
.
Для более подробного ознакомления с этим вы должны взглянуть на шаблоны неизменяемых обновлений, так как это просто рецепты, которые вы всегда можете использовать: https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns