Dlaczego callback timera lub strumienia może korzystać ze starego stanu?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Funkcja utworzona w danym renderowaniu ma dostęp do wartości z tamtego renderowania. Jeśli uruchomię timer raz i zostawię jego callback bez zmian, może on nadal widzieć dawną wartość. To efekt domknięcia, a nie tego, że React „nie zaktualizował zmiennej”.
Gdy dopisuję kolejny fragment tekstu, często pomaga setText(previous => previous + fragment). Dostaję wtedy bieżący stan potrzebny do aktualizacji. Nie rozwiązuje to jednak pomieszania dwóch różnych rozmów. Do tego potrzebuję jeszcze identyfikatora żądania. Jeśli zmiana wartości powinna przebudować subskrypcję, uwzględniam ją w zależnościach efektu i poprawnie sprzątam poprzednią.
Dlaczego to ważne: Strumieniowe UI łatwo ujawnia ten błąd.
Możliwe dopytania: Kiedy użyć funkcji aktualizującej stan, a kiedy odtworzyć subskrypcję?
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.
Zacznij od
- B-P07 · Co to jest domknięcie, czyli closure? — JavaScript, TypeScript i Node.js
- C-P04 · Do czego służy useEffect i co oznacza tablica zależności? — React, Next.js i frontend
Dalsza lektura
- React: Synchronizing with Effects(otwiera się w nowej karcie)Docs; dostęp 22.10.2026. Cel efektów, cleanup i ochrona przed nieaktualnymi wynikami.