Wpis z mikrobloga

@cagedindreams: Musisz zrobić 2 rzeczy:
-wszystkie li w map muszą mieć key z unikalną wartością (dokładnie to co powiedział @Marmite)
-w setNumbers musisz przekazywać nowa tablice zapis
var newNumbers = numbers nie tworzy nowej tablicy tylko tworzy nową referencje do istniejącej tablicy. Powinieneś zrobić np. coś takiego
setNumbers([...numbers])
@Marmite: @lobo: Dobra panowie działa. Ogólnie to setNumbers([...numbers]) wystarczyło ale rozumiem że zawsze trzeba dawać key przy mapowaniu.
Pytanie jeszcze mam czy coś takiego jak key={number.id} wystarczy skoro indexu nie mogę dawać?
Jeszcze jedno rozwiązanie z key znalazłem na stacku żeby po prostu użyć React.Children.toArray.
Wielkie dzięki za pomoc. Z tą referencją sam powinienem się domyślić xD
@cagedindreams: Ogólnie to key w map musi być w zasadzie zawsze, dodatkowo musi jednoznacznie identyfikować wiersz w tablicy. Technicznie jeżeli tablica nie zmienia kolejności, ani nie są z niej usuwane elementy może używać indeksów jako kluczy. Jeżeli jednak elementy mogę zmieniać kolejność bądź być kasowane to albo muszą być identyfikowane przez ich unikalną wartość (np. tablica nie ma powtarzających się wpisów) albo tworzysz tablicę typu:
[{
id: 'xx',
value: ''
}]
@wybacz: Masz mały przykład: https://codesandbox.io/s/crazy-wu-icjs30

aby wywołać zmianę stanu nowa wartość musi się różnić od starej, przez różnić mam na myśli
nowa zmienna !== stara zmienna

co w przypadku arr2 jest niespełnione bo zmienna arr2 dalej jest dokładnie ta samą zmienną, co prawda doszły do niej nowe wartości, ale referencja samej zmiennej się nie zmieniła zobacz sobie coś takiego

var a = [1];
var b = a;

b.push(2);

console.log(a, b); //[1,2],
@ZaczynamOdNowa: Ale sama funkcja nie ma znaczenia referencje dla zmiennych tworzonych przez useState się nie zmieniają. Dopieru użycie settera z useState [val, setteter] = useState(), zmienia referencje
@ZaczynamOdNowa: Zobacz sobie ten test https://codesandbox.io/s/naughty-frost-74jl04?file=/src/App.js

kliknij następująco:
-test ref
-dodaj do arr2
-test ref
-dodaj do arr
-test ref

zobacz, że rerender następuje dopiero jak klikniesz dodaj do arr bo tylko w tym wypadku referencja się zmieniła, tak samo zobaczysz, że tylko porównanie arr === test będzie skakało z false/true zależnie czy przed kliknięciem test ref nacisnąłeś dodaj do arr, bo jeżeli nie to będzie zawsze true (oprócz pierwszego kliku