Wpis z mikrobloga

#javascript #typescript #react

Mam aplikacje React. W useRef mam wartość sequence, która jest szeregiem liczb (number[]). W kontekście chcę sobię zapisać początkową wartość sequence ponieważ po zakończeniu jakichś tam działań chcę przywrócić sequence do stanu początkowego.
Używam do tego drugiego useRef, którego nazywam w tym wypadku initialSequence.
Trzaskam prostą komende:

initialSequence.current = sequence.current
Dalej są wykonywane różne działania na sequence, które w końcowym efekcie staje się pustą tablicą.
No to na końcu działań robię

sequence.current = initialSequence.current
i co...
okazuje się że initialSequence również jest puste. Używam console.loga do śledzenia stanu initialSequenceprzez wszystkie wywołania funkcji i wygląda to tak, jakby initialSequence cały czas odwzorowywało stan sequence mimo, że initialSequence zostało tylko raz nadpisane.

Cały dzień nad tym spędziłem i już #!$%@? w ostateczności spróbowałem zamienić initialSequence na stringa, którego później pod koniec tych różnych działań zmieniam na ciąg liczb i przywracam początkową wartość sequence bez problemu w poniższy sposób.

initialSequence.current = sequence.current.join(" ");
sequence.current = initialSequence.current
.split(" ")
.map((value) => parseInt(value));

O co tu chodzi? Czy array liczb ma jakieś właściwości których nie rozumiem?
  • 7
via Wykop Mobilny (Android)
  • 1
@nevill: hasła na dziś: referencje obiektów/tablic i klonowanie obiektów (jak potrzeba to głębokie klonowanie). Skoro to tablica numberów to pewnie wystarczy zrobić sequence.current = [...initialSequence.current]