В React-компоненте: function Counter(){ const [c,setC]=useState(0); useEffect(()=>{ setInterval(()=>setC(c+1),1000); },[]); return {c}; } — почему счётчик не увеличивается как ожидается и как поправить код

23 Июл в 14:14
2 +2
0
Ответы
1
Проблема: в эффекте с пустым массивом зависимостей ([][][]) замыкание фиксирует начальное значение состояния c=0c=0c=0. Интервал вызывает `setC(c+1)`, где ccc всегда равно начальному значению, поэтому значение постоянно присваивается 111 и не растёт. Кроме того интервал не очищается при размонтировании.
Исправление — использовать функциональный апдейтер (чтобы брать актуальное состояние) и очищать интервал:
function Counter() {
const [c, setC] = useState(000);
useEffect(() => {
const id = setInterval(() => setC(prev => prev + 111), 100010001000);
return () => clearInterval(id);
}, []);
return {c};
}
Альтернатива (не рекомендую): добавлять ccc в массив зависимостей — это создаст новый интервал при каждом изменении состояния, если не очищать старый, приведёт к утечкам. Функциональный апдейтер — простое и корректное решение.
23 Июл в 14:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир