Я не уверен, что это то, что вы пытаетесь сделать, потому что ваш пример setState, похоже, использует другие значения, чем ваш исходный .splice
. Но я использовал ваш оригинальный сплайс в качестве примера для go off:
Для справки: https://reactjs.org/docs/update.html#nested -коллекций
state = {
array: [
{
1: { thing1: 'thing1', thing2: 'thing2' },
},
{
2: { thing1: 'thing1', thing2: 'thing2' },
},
{
3: { thing1: 'thing1', thing2: 'thing2' },
}
]
};
const newObj = {
newthing1: 'newthing1',
newthing2: 'newthing2'
};
this.setState( prevState =>
update(prevState, { array: { $splice: [[0, 1, newObj]] } })
);
Честно говоря, это не так выглядит неправильно, потому что объекты противоречивы. Я предполагаю, что вы имели в виду это:
update(prevState, { array: { $splice: [[0, 1, {1: newObj}]] } })
Или, если я go отклоню вашу попытку update
, может быть, это?
update(prevState, { array: { $splice: [[1, 1, {2: newObj}]] } })
Чтобы объяснить, что это делает:
Начиная с prevState
объекта,
Сначала он обходит свойство array
Затем он перебирает список команд splice
(в данном примере только 1)
Выполняет это соединение:
[
1, // starting index to splice at
1, // length to splice out
{2: newObj} // object(s) to insert
]