Я пробовал это сделать:
const rowObj = {key: value};
const rowIndex = 2;
this.setState({
data: update(this.state.data,
{ [rowIndex] : { $push : [rowObj] } }
)
})
Но это вызывает такую ошибку:
Uncaught Error: update(): expected target of $push to be an array; got undefined.





Поскольку вы хотите нажать на массив, то есть данные, вам не нужно указывать индекс и писать его как
const rowObj = {key: value};
this.setState({
data: update(this.state.data,
{ $push : [rowObj] }
)
})
или иначе, если вы хотите установить значение для определенного индекса в массиве, вы должны использовать $set
const rowObj = {key: value};
const rowIndex = 2;
this.setState({
data: update(this.state.data,
{ [rowIndex] : { $set : rowObj } }
)
})
любой другой вариант без использования цикла? bcz длина моей строки данных составляет около 5000+
Поскольку this.state.data [rowIndex] не определен, а не является произвольным перед нажатием, он выдаст вам ошибку и почему вы не можете использовать set
[{id: 1, rowId: «rw153431859379599d449», последовательность: 1, cl1534318588226572647: «asd», cl15343185882290af581: «test»}, {id: 2, rowId: «rw1534318593765aea780», последовательность: 2, cl1534318593765aea780 », последовательность: 2, cl1534315888228222, cl null}, {id: 16, rowId: "rw1534396933085ae919c", последовательность: 3, cl1534318588226572647: null, cl15343185882290af581: null}]
@SagarChavada, из ваших демонстрационных данных видно, что this.state.data [rowIndex] не является массивом, но свойство объекта и push не поддерживается для объекта, вместо этого вы должны использовать $ set или $ merge, если вы хотите объединить характеристики
Попробуйте вот так
const rowArray = [{key: value},{key: value},{key: value}];
const obj = {key: value}
const rowIndex = 2;
rowArray.splice(rowIndex, 0, obj);
this.setState({ data: update(this.state.data,{rowArray : {$set : rowArray}} ) });
блестящий брат ... это именно то, что я ищу.
но в моем случае мне нужно вставить новую строку по определенному индексу .. я не могу использовать $ set .. возможно ли это с помощью push?