React · Middle · Pytanie 11 z 75
Dlaczego licznik zatrzymuje się na 1?
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => setCount(count + 1), 1000);
return () => clearInterval(id);
}, []);- 1
setIntervalnie można używać wewnątrz efektów - ✓Poprawna odpowiedź: Callback zamknął w domknięciu
count = 0z pierwszego renderu - 3
clearIntervaluruchamia się zaraz po pierwszym tyknięciu
Wyjaśnienie
Efekt z [] jest tworzony raz i widzi count z pierwszego renderu. Każde tyknięcie ustawia 0 + 1. Rozwiązania: aktualizacja funkcyjna setCount(c => c + 1) (najlepiej), dodanie count do zależności (interwał jest odtwarzany) lub trzymanie wartości w ref.