Обнаружить и исправить ошибки в React‑компоненте

Исправьте импорт хуков и JSX, переключайте started на противоположное значение, а жизненным циклом интервала управляйте одним эффектом с очисткой.

Короткий ответ

Что ответить на собеседовании

Исправьте импорт хуков и 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. Подсветка исчезает на следующем тике; для точного времени учитывают задержки таймеров отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее