Отправьте новый объект по определенному индексу с помощью помощника по неизменяемости

Я пробовал это сделать:

 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.
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
0
3 428
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку вы хотите нажать на массив, то есть данные, вам не нужно указывать индекс и писать его как

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 } }
      ) 
})

но в моем случае мне нужно вставить новую строку по определенному индексу .. я не могу использовать $ set .. возможно ли это с помощью push?

Sagar Chavada 16.08.2018 07:51

любой другой вариант без использования цикла? bcz длина моей строки данных составляет около 5000+

Sagar Chavada 16.08.2018 07:55

Поскольку this.state.data [rowIndex] не определен, а не является произвольным перед нажатием, он выдаст вам ошибку и почему вы не можете использовать set

Shubham Khatri 16.08.2018 07:55

[{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}]

Sagar Chavada 16.08.2018 08:03

@SagarChavada, из ваших демонстрационных данных видно, что this.state.data [rowIndex] не является массивом, но свойство объекта и push не поддерживается для объекта, вместо этого вы должны использовать $ set или $ merge, если вы хотите объединить характеристики

Shubham Khatri 16.08.2018 08:23
Ответ принят как подходящий

Попробуйте вот так

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}} ) });

блестящий брат ... это именно то, что я ищу.

Sagar Chavada 21.08.2018 08:09

Другие вопросы по теме