• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[React] - usuwanie elementu ze stanu

Object Storage Arubacloud
0 głosów
790 wizyt
pytanie zadane 21 września 2018 w JavaScript przez Bakr Mądrala (6,850 p.)

Witam,

 

W jaki sposób usunąć wybrany element ze stanu. Stan jest tablicą, więc stosuje array(filter). Nie wiem jednak w jaki sposób przekierować index z elementu. 

delete = (e) => {
  this.setState(prevState => {
    return {
      cart: [...this.state.cart.filter((element, index, array)=>{
        return (index !== e);
      })]
    }
  })
}



{this.state.cart.map( (el, index) => {
  return <li key={index} onClick={this.delete}>{el.title} - {el.identificator}</li>;
})}



 

1 odpowiedź

0 głosów
odpowiedź 21 września 2018 przez k.wichura Pasjonat (19,870 p.)
delete = (e) => {
  const elementToRemove = parseInt(e.target.value,10)
  const newState = this.state.cart.filter(el=> parseInt(el.identificator,10) !== elementToRemove)
this.setState({cart: newState})
}
  {this.state.cart.map((el, index) =>{
                  return <li key={index} value={el.identificator} onClick={this.delete}>{el.title} - {el.identificator}</li>;
                })}

 

komentarz 21 września 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Parę drobnych uwag:

  1. tworzysz zmienną newState, co sugeruje, że podmienia ona cały state, a tak się nie dzieje, podmienia tylko wlaściwość cart w state, więc trzeba by tę nazwę zmienić, może np. newCartWithoutRemovedElement.
  2. druga kwestia, bardziej do analizy calego state, co tkwi w identificator i dlaczego to nie jest typ number skoro jako taki potem jest używany? Jeśli jest to string to Kolega zrobił dobrze, robiąc parseInt na każdym elemencie podczas filtrowania, ale tak być nie powinno. Nawet jeśli z jakiś powodów wartość ta trafia początkowo jako string to powinna być przekonwertowana do number w momencie zapisu do state, aby potem nie tracić zasobów na przerabianie w pętli.
  3. unikalbym wsadzania do key  w LI wartosci index, jest to pewnie nie zrozumienie idei właściwości key i tak na prawdę, jeśli miałby tam zawsze być we wszystkich listach tylko index to nie będzie to unikalna wartość więc można w ogóle to pominąć (tylko trzeba by pewnie wtedy odpowiednio ustawić eslinta jeśli to sprawdza, choć tak na prawdę to dla key={index} eslint powinien strzelić warningiem albo errorem).
komentarz 21 września 2018 przez k.wichura Pasjonat (19,870 p.)
edycja 21 września 2018 przez k.wichura

Nie bardzo rozumiem czy te uwagi są do mnie czy do kolegi :)  

Pytanie było jak usuwać elementy, a nie czy dobrze korzysta z key czy state. Na nie odpowiedziałem. Nazwa newState rzeczywiście powinna być inna.

Tak podchodząc do problemu, to trzeba się zastanowić czy nazwa delete jest dobra. Bo mogłaby być np. removeElementFromChart. Oraz czy nie lepiej skrócić map do formy :

{this.state.cart.map((el, index) =><li key={`cartElement${index}`} value={el.identificator} onClick={this.removeElementFromChart}>{el.title} - {el.identificator}</li>)}

A co jak cart będzie pusty(nie bedzie istnial) ? Więc może : 

{this.state.cart && this.state.cart.map((el, index) =><li key={`cartElement${index}`} value={el.identificator} onClick={this.removeElementFromChart}>{el.title} - {el.identificator}</li>)}

 

Podobne pytania

0 głosów
2 odpowiedzi 427 wizyt
pytanie zadane 18 września 2018 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
0 odpowiedzi 100 wizyt
0 głosów
0 odpowiedzi 268 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...