Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
36
Ревью и рефакторинг таймера в React‑компоненте
Компании, где спрашивали:
Фоксфорд
Условие задачи
В данном задании представлен React‑компонент, реализующий простой таймер. Требуется провести код‑ревью и выполнить рефакторинг, улучшив читаемость и структуру кода, а также избавиться от потенциальных проблем.
Что нужно сделать:
- Проанализировать текущую реализацию, выявить места, где код можно упростить или сделать более надёжным.
- Переписать компонент, используя более понятные имена переменных и функций, избавиться от дублирования логики.
- При необходимости добавить комментарии, улучшить работу с эффектами и очисткой ресурсов.
- Сохранить функциональность: кнопка «Start/Pause» должна запускать и приостанавливать счёт, кнопка «Stop» — сбрасывать таймер, а каждый пятый тик должен визуально подсвечиваться.
import { useEffect, useRef, useState } from "react";
import "./App.css";
export default function App() {
const [isRunning, setIsRunning] = useState(false);
const [seconds, setSeconds] = useState(0);
const timerRef = useRef();
const handleStop = () => {
setSeconds(0);
setIsRunning(false);
clearInterval(timerRef.current);
timerRef.current = null;
};
const handleToggle = () => {
if (isRunning) {
clearInterval(timerRef.current);
timerRef.current = null;
} else {
timerRef.current = setInterval(() => {
setSeconds((prev) => prev + 1);
}, 1000);
}
setIsRunning(!isRunning);
};
useEffect(() => {
if (seconds % 5 === 0 && seconds !== 0) {
document.querySelector(".timer").classList.add("pulsate");
}
}, [seconds]);
return (
<div className="main">
<div>
<button onClick={handleToggle}>{isRunning ? "Pause" : "Start"}</button>
<button onClick={handleStop}>Stop</button>
</div>
<div className="timer">{seconds}</div>
</div>
);
}
Ожидаемый результат: После рефакторинга код должен быть проще для восприятия, не содержать лишних побочных эффектов и корректно работать во всех браузерах.