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

Usunięcie elementu z tablicy {JS}

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
431 wizyt
pytanie zadane 21 listopada 2022 w JavaScript przez chrystian Gaduła (4,780 p.)

Mam funkcje która usuwa object{note.id,body:"text"} z tablicy 

Mam dwa sposoby, żaden nie działa pierwszy, wszystkie usuwa elementy, oprócz pierwszego 
 

function deleteNote(index) {
		setNotes((newNotes) => {
			return newNotes.filter((note) => {
				return note.id === index;
			});
		});
	}

drugi  z błedem Each child in a list should have a unique "key" prop

function deleteNote(index) {
		setNotes((newNotes) => {
			return newNotes.map((note) => {
				return note.id === index ? newNotes.splice(index, 1) : note;
			});
		});
	}

funkcja jest przesyłana jako prop 

<Example delete={deleteNote} />

i w componencie jest przycisk 

	<button key={note.id + 20} onClick={() => props.delete(note.id)}>
					delete
				</button>

 

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2022 przez Wiciorny Ekspert (278,610 p.)
 setNotes((newNotes) => {
            return newNotes.filter((note) => {
                return note.id === index;
            });
        });

filtrujesz tablice wszystkich twoich elementów i sprawdzasz czy index = id, więc podejrzewam, że skoro przechodzisz przez każdego - > to na pewno twoje ID są większe od 0 ( a index jest liczony od 0) więc pierwszy się usuwa, natomiast kolejne elementy mają id 1.... n ( n- liczba elementów), więc pewnie i na takich indeksach bedą ... stąd fitler zwraca Ci pozostałe elementy. 

Natomiast druga sprawa robisz 

key={note.id + 20} 

nie jest unikalne, czyli występuje tutaj kilka takich samych kluczy

Twoje wiersze w tablicy JS powinny mieć unikalną wartość KEY- klucza. Pomoże to ReactJS znaleźć odniesienia do odpowiednich węzłów DOM i zaktualizować tylko zawartość która jest wewnątrz znaczników. 

W drugim przypadku dalej zwracasz kilka elementów przez to , żę note.id === index nie jest tylko sprawdzane dla 1 elementu ale dla calej tablicy i dla każdego elementu z tablicy robisz  splice- i wydaje mi się ze nie do konca wiesz co się wtedy dzieje 
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Splice nie zwróci Ci usuwanego elementu, ale zwraca Ci całą tablice bez tego co usuwasz. 

const dataNr = ['1', '2', '3', '4'];
dataNr.splice(1, 1);
// index = 1 , element 1 
console.log(dataNr);
//> Array ["1", "3", "4"]

 

Podobne pytania

0 głosów
0 odpowiedzi 260 wizyt
pytanie zadane 15 maja 2022 w JavaScript przez chrystian Gaduła (4,780 p.)
0 głosów
0 odpowiedzi 327 wizyt
0 głosów
2 odpowiedzi 900 wizyt

93,157 zapytań

142,171 odpowiedzi

321,879 komentarzy

62,486 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 224p. - Marcin Putra
  2. 224p. - nidomika
  3. 223p. - dia-Chann
  4. 221p. - ssynowiec
  5. 217p. - Mikbac
  6. 216p. - CC PL
  7. 215p. - Łukasz Piwowar
  8. 212p. - zmmz89
  9. 210p. - Adrian Wieprzkowicz
  10. 208p. - rafalszastok
  11. 206p. - Michal Drewniak
  12. 204p. - Łukasz Eckert
  13. 202p. - rucin93
  14. 200p. - robwarsz
  15. 198p. - TheLukaszNs
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...