Chodzi o to, że powinienem być w stanie włożyć Boba, Sally i Jacka do pudełka. Mogę też wyjąć albo z pudełka. Po usunięciu nie ma miejsca.
people = ["Bob", "Sally", "Jack"]
Muszę teraz usunąć, na przykład „Bob”. Nowa tablica wyglądałaby następująco:
["Sally", "Jack"]
Oto mój składnik reagowania:
...
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];
},
...
Tutaj pokazuję minimalny kod, ponieważ jest w nim więcej (onClick itp.). Kluczową częścią jest usunięcie, usunięcie, zniszczenie "Bob" z tablicy, ale removePeople()
nie działa po wywołaniu. Jakieś pomysły? Ja patrząc na to , ale mogę robić coś złego, ponieważ używam React.
javascript
arrays
reactjs
Sylar
źródło
źródło
array.splice(array, 1);
Dziękiarray.splice(array, 1);
? Myślę, że musisz go edytować .. Powinieneś używać różnych zmiennych ...setState()
.Korzystając z Reacta, nigdy nie powinieneś zmieniać stanu bezpośrednio. Jeśli obiekt (lub
Array
który jest również obiektem) zostanie zmieniony, powinieneś utworzyć nową kopię.Inni sugerowali użycie
Array.prototype.splice()
, ale ta metoda mutuje Array, więc lepiej nie używaćsplice()
z React.Najłatwiejszy w użyciu
Array.prototype.filter()
do utworzenia nowej tablicy:źródło
this.setState(prevState => ({ people: prevState.people.filter(person => person !== e.target.value) }));
this.state.people.filter((_, i) => i !== index)
Oto niewielka odmiana odpowiedzi Aleksandra Pietrowa za pomocą ES6
źródło
Służy
.splice
do usuwania elementu z tablicy. Używającdelete
, indeksy tablicy nie zostaną zmienione, ale wartość konkretnego indeksu ulegnie zmianieundefined
Składnia:
array.splice(start, deleteCount[, item1[, item2[, ...]]])
Edytować:
Jak wskazał justin-grant , z reguły nigdy nie mutuj
this.state
bezpośrednio, ponieważsetState()
późniejsze wywołanie może zastąpić dokonaną przez Ciebie mutację. Traktujthis.state
tak, jakby było niezmienne.Alternatywą jest tworzenie kopii obiektów w programie
this.state
i manipulowanie nimi, przypisując je z powrotem za pomocąsetState()
.Array#map
,Array#filter
Itd. Mogą być wykorzystane.źródło
setState
. Inne odpowiedzi zawierają szczegółowe informacje o tym, jak to zrobić.Łatwy sposób na usunięcie pozycji z tablicy stanów w reakcji:
kiedy jakiekolwiek dane usuwają się z bazy danych i aktualizują listę bez wywołania API tym razem przekazujesz usunięty identyfikator do tej funkcji i ta funkcja usuwa usunięte recored z listy
źródło
item.post_id !== deletePostId
Niektóre odpowiedzi wspominały o użyciu „splotu”, co, jak powiedział Chance Smith, spowodowało mutację tablicy. Sugerowałbym użycie wywołania metody „plasterek” (dokument „plasterek” jest tutaj), które tworzy kopię oryginalnej tablicy.
źródło
To bardzo proste. Najpierw określ wartość
Teraz,
źródło
Zapomniałeś użyć
setState
. Przykład:Ale lepiej jest użyć,
filter
ponieważ nie powoduje mutacji tablicy. Przykład:źródło
Więcej informacji znajdziesz w dokumencie Redfer
źródło