React · Middle · Frage 11 von 75
Warum bleibt der Zähler bei 1 stehen?
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => setCount(count + 1), 1000);
return () => clearInterval(id);
}, []);- 1Der Callback hält
count = 0aus dem ersten Rendering fest - 2
setIntervaldarf in Effekten gar nicht verwendet werden - 3
clearIntervalfeuert direkt nach dem ersten Tick des Timers
Antwort zeigen
Richtige Antwort: Der Callback hält count = 0 aus dem ersten Rendering fest
Erklärung
Der Effekt mit [] wird einmal erzeugt und sieht count aus dem ersten Rendering. Jeder Tick setzt 0 + 1. Lösungen: ein funktionales Update setCount(c => c + 1) (am besten), count zu den Abhängigkeiten hinzufügen (das Intervall wird neu erzeugt) oder den Wert in einer ref halten.