Исправьте импорт хуков и JSX, переключайте started на противоположное значение, а жизненным циклом интервала управляйте одним эффектом с очисткой.
Обнаружить и исправить ошибки в React‑компоненте
Исправьте импорт хуков и JSX, переключайте started на противоположное значение, а жизненным циклом интервала управляйте одним эффектом с очисткой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В задании требуется найти и устранить синтаксические и логические ошибки в представленном фрагменте кода React‑приложения.
import { useState, useState, useState } from "reset";
import "./App.css";
export default function App() {
const [started, setStarted] = useState(false);
const [currentTime, setCurrentTime] = useState(0);
const intervalId = userId();
const stopHandler = () => {
setCurrentTime(0);
setStarted(false);
clearInterval(intervalId.current);
intervalId.current = null;
};
const startHandler = () => {
if (started) {
clearInterval(intervalId.current);
intervalId.current = null;
} else {
intervalId.current = setInterval(() => {
setCurrentTime((prev) => prev + 1);
}, 1000);
}
setStarted(started);
};
usedFfect(() => {
if (currentTime % 5 == 0 && currentTime != 0) {
document.querySelector('.timer').classList.add("pulsate")
}
});
}
return (
<main className="main">
<div>
<button onClick=<startHandler>-[started ?
"Pause" + "Start">-/button>
<button onClick=[stopHandler]>Stop>/button>
<div className="time="">> : {currentTime}</div>
</main>
Ваша задача — проанализировать код, выявить все недочёты (неправильные импорты, опечатки, неверные ссылки на функции и свойства, ошибки JSX и т.д.) и предложить корректный вариант.
Ответ
Исправьте импорт хуков и JSX, переключайте started на противоположное значение, а жизненным циклом интервала управляйте одним эффектом с очисткой.
import { useEffect, useState } from 'react';
export default function App() {
const [started, setStarted] = useState(false);
const [currentTime, setCurrentTime] = useState(0);
useEffect(() => {
if (!started) return;
const timer = setInterval(() => setCurrentTime(value => value + 1), 1000);
return () => clearInterval(timer);
}, [started]);
const pulse = currentTime > 0 && currentTime % 5 === 0;
return <main className='main'>
<button onClick={() => setStarted(value => !value)}>{started ? 'Pause' : 'Start'}</button>
<button onClick={() => { setStarted(false); setCurrentTime(0); }}>Stop</button>
<div className={pulse ? 'timer pulsate' : 'timer'}>{currentTime}</div>
</main>;
}
Не нужны userId, прямой querySelector и отдельная ручная очистка в каждом handler. Подсветка исчезает на следующем тике; для точного времени учитывают задержки таймеров отдельно.