История такова, что я смогу поместить Боба, Салли и Джека в коробку. Я тоже могу удалить из коробки. При снятии слота не остается.
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's say it's Bob.
delete array[index];
},
...
Здесь я покажу вам минимальный код, так как это еще не все (onClick и т. Д.). Ключевой частью является удаление, удаление, уничтожение «Боба» из массива, но removePeople()
он не работает при вызове. Любые идеи? Я смотрел на это, но, возможно, я делаю что-то не так, поскольку использую React.
javascript
arrays
reactjs
Sylar
источник
источник
array.splice(array, 1);
Спасибоarray.splice(array, 1);
? Думаю, вам нужно его отредактировать .. Вы должны использовать разные переменные ...setState()
.При использовании React никогда не следует напрямую изменять состояние. Если объект (или
Array
, который тоже является объектом) изменяется, вы должны создать новую копию.Другие предлагали использовать
Array.prototype.splice()
, но этот метод изменяет массив, поэтому его лучше не использоватьsplice()
с React.Самый простой в использовании
Array.prototype.filter()
для создания нового массива:источник
this.setState(prevState => ({ people: prevState.people.filter(person => person !== e.target.value) }));
this.state.people.filter((_, i) => i !== index)
Вот небольшой вариант ответа Александра Петрова с использованием ES6
источник
Используйте
.splice
для удаления элемента из массива. При использованииdelete
, индексы массива не будут изменены, но значение конкретного индекса будетundefined
Синтаксис:
array.splice(start, deleteCount[, item1[, item2[, ...]]])
Редактировать:
Как указал Джастин-Грант , как правило, никогда не изменяйте
this.state
напрямую, посколькуsetState()
последующий вызов может заменить произведенную вами мутацию. Относитесьthis.state
к нему как к неизменному.Альтернативой является создание копий объектов в
this.state
и управление копиями, назначение их обратно с помощьюsetState()
.Array#map
иArray#filter
т. д. могут быть использованы.источник
setState
. В других ответах есть подробности о том, как это сделать.Простой способ удалить элемент из массива состояний в React:
когда какие-либо данные удаляются из базы данных и обновляют список без вызова API, когда вы передаете удаленный идентификатор этой функции, и эта функция удаляет удаленные, записанные из списка
источник
item.post_id !== deletePostId
В некоторых ответах упоминалось использование «splice», которое, как сказал Ченс Смит, изменило массив. Я бы посоветовал вам использовать вызов метода «slice» (документ для «slice» здесь), который делает копию исходного массива.
источник
Это очень просто: сначала вы определяете ценность
Сейчас,
источник
Вы забыли использовать
setState
. Пример:Но лучше использовать,
filter
потому что он не мутирует массив. Пример:источник
Redfer doc для получения дополнительной информации
источник