React · Middle · Запитання 11 з 75
Чому лічильник зупиниться на 1?
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => setCount(count + 1), 1000);
return () => clearInterval(id);
}, []);- 1
setIntervalне можна використовувати всередині ефектів - ✓Правильна відповідь: Колбек замкнув
count = 0з першого рендеру - 3
clearIntervalспрацьовує одразу після першого тіку
Пояснення
Ефект із [] створено один раз, і він бачить count з першого рендеру. Кожен тік ставить 0 + 1. Рішення: функціональне оновлення setCount(c => c + 1) (найкраще), додати count у залежності (інтервал перестворюватиметься) або зберігати значення в ref.