Подтвердить что ты не робот

Удалить элемент из массива состояний в реакции

Рассказ: я должен быть в состоянии положить Боба, Салли и Джека в коробку. Я также могу удалить либо из коробки. При удалении слот не остается.

people = ["Bob", "Sally", "Jack"]

Теперь мне нужно удалить, скажем, "Боб". Новый массив:

["Sally", "Jack"]

Вот мой реактивный компонент:

...

getInitialState: function() {
  return{
    people: [],
  }
},

selectPeople(e){
  this.setState({people: this.state.people.concat([e.target.value])})
},

removePeople(e){
  var array = this.state.people;
  var index = array.indexOf(e.target.value); // Let say it Bob.
  delete array[index];
},

...

Здесь я покажу вам минимальный код, поскольку его больше (onClick и т.д.). Ключевой частью является удаление, удаление, уничтожение "Боба" из массива, но removePeople() не работает при вызове. Есть идеи? Я был глядя на это, но я мог бы делать что-то неправильно, так как я использую React.

4b9b3361

Ответ 1

Чтобы удалить элемент из массива, просто выполните:

array.splice(index, 1);

В твоем случае:

removePeople(e) {
  var array = [...this.state.people]; // make a separate copy of the array
  var index = array.indexOf(e.target.value)
  if (index !== -1) {
    array.splice(index, 1);
    this.setState({people: array});
  }
},

Ответ 2

При использовании React вы никогда не должны напрямую изменять состояние. Если объект (или Array, который тоже является объектом) изменяется, вам следует создать новую копию.

Другие предлагали использовать Array.prototype.splice(), но этот метод изменяет массив, поэтому лучше не использовать splice() с React.

Array.prototype.filter() всего использовать Array.prototype.filter() для создания нового массива:

removePeople(e) {
    this.setState({people: this.state.people.filter(function(person) { 
        return person !== e.target.value 
    })});
}

Ответ 3

Вот небольшая вариация ответа Александра Петрова с использованием ES6

removePeople(e) {
    let filteredArray = this.state.people.filter(item => item !== e.target.value)
    this.setState({people: filteredArray});
}

Ответ 4

Используйте .splice, чтобы удалить элемент из массива. При использовании delete индексы массива не будут изменены, но значение определенного индекса будет undefined

Метод splice() изменяет содержимое массива путем удаления существующих элементов и/или добавления новых элементов.

Синтаксис: array.splice(start, deleteCount[, item1[, item2[, ...]]])

var people = ["Bob", "Sally", "Jack"]
var toRemove = 'Bob';
var index = people.indexOf(toRemove);
if (index > -1) { //Make sure item is present in the array, without if condition, -n indexes will be considered from the end of the array.
  people.splice(index, 1);
}
console.log(people);

Ответ 5

Простой способ удалить элемент из массива состояний в реакции:

когда какие-либо данные удаляются из базы данных и обновляются без вызова API, тогда вы передаете удаленный идентификатор этой функции, и эта функция удаляет удаленные записи из списка

remove_post_on_list = (deletePostId) => {
    this.setState({
      postList: this.state.postList.filter(item => item.post_id != deletePostId)
    })
  }

Ответ 6

В некоторых ответах упоминалось использование "сплайсинга", что, как сказал Шанс Смит, мутировало массив. Я бы посоветовал вам использовать вызов метода "slice" (документ для "slice" здесь), который создает копию исходного массива.

Ответ 7

Вы забыли использовать setState. Пример:

removePeople(e){
  var array = this.state.people;
  var index = array.indexOf(e.target.value); // Let say it Bob.
  delete array[index];
  this.setState({
    people: array
  })
},

Но лучше использовать filter, потому что он не мутирует массив. Пример:

removePeople(e){
  var array = this.state.people.filter(function(item) {
    return item !== e.target.value
  });
  this.setState({
    people: array
  })
},

Ответ 8

Это очень просто, сначала вы определяете значение

state = {
  checked_Array: []
}

Сейчас,

fun(index) {
  var checked = this.state.checked_Array;
  var values = checked.indexOf(index)
  checked.splice(values, 1);
  this.setState({checked_Array: checked});
  console.log(this.state.checked_Array)
}

Ответ 9

   removePeople(e){
    var array = this.state.people;
    var index = array.indexOf(e.target.value); // Let say it Bob.
   array.splice(index,1);
  }

Redfer doc для получения дополнительной информации