I just asked a question earlier here: react value of a state variable different in a different function
and now I have a new problem.
having a useEffect that looks like this
  useEffect(() => {
    countDown();
    console.log('Score in useeffect', strokeScore);
  }, [strokeScore]);
is breaking a setInterval that looks like this:
  const countDown = () => {
    // let strokeCountdown = Math.floor(Math.random() * 31) + 100;
    let strokeCountdown = 20
    let strokeCountdownSpeedOptions = [1000, 500, 300, 200];
    let strokeCountDownSpeed = strokeCountdownSpeedOptions[Math.floor(Math.random()*strokeCountdownSpeedOptions.length)];
    let strokeCounter = setInterval(() => {
        strokeCountdown--
        setStrokeCountdown(strokeCountdown)
        if (strokeCountdown === 0) {
            endOfGameRound()
            clearInterval(strokeCounter)
            setTotalStrokeScore(strokeScore);
        }
    }, strokeCountDownSpeed)
  }
The full component looks like this:
import React, { useEffect, useState } from 'react';
function ScoreCard() {
  const [strokeScore, setStrokeScore] = useState(1);
  const [totalStrokeScore, setTotalStrokeScore] = useState(1);
  const [strokeCountdown, setStrokeCountdown] = useState();
  const strokeCountdownDing = new Audio('/sounds/round-complete.mp3');
  // make new variable, maybe? 
  let strokeScoreCount = 0;
  const endOfGameRound = () => {
    strokeCountdownDing.play();
    document.getElementById('stroke-counter-button').disabled = true;
  }
  const addToStrokeScore = () => {
    setStrokeScore(prev => prev + 1);
    // prints the correct number
    console.log('Score in function', strokeScore);
    if (strokeCountdown === 0) {
        endOfGameRound()
    }
  }
  const subtractStrokeScore = () => {
    setStrokeScore(strokeScore - 1);
  }
  const countDown = () => {
    // let strokeCountdown = Math.floor(Math.random() * 31) + 100;
    let strokeCountdown = 20
    let strokeCountdownSpeedOptions = [1000, 500, 300, 200];
    let strokeCountDownSpeed = strokeCountdownSpeedOptions[Math.floor(Math.random()*strokeCountdownSpeedOptions.length)];
    let strokeCounter = setInterval(() => {
        strokeCountdown--
        setStrokeCountdown(strokeCountdown)
        if (strokeCountdown === 0) {
            endOfGameRound()
            clearInterval(strokeCounter)
            setTotalStrokeScore(strokeScore);
        }
    }, strokeCountDownSpeed)
  }
  useEffect(() => {
    countDown();
    console.log('Score in useeffect', strokeScore);
  }, [strokeScore]);
  return (
    <div className="game__score-card">
      <div className="game__speed-level">
          Speed: idk
      </div>
      <div className="game__stroke-countdown">
          Countdown: {strokeCountdown}
      </div>
      <p>Score: {strokeScore}</p>
      <button id="stroke-counter-button" onClick={addToStrokeScore}>
          {strokeCountdown === 0 ? 'Game Over' : 'Stroke'}
      </button>
      {/* window.location just temp for now */}
      {strokeCountdown === 0 
        ? <button onClick={() => window.location.reload(false)}>Play Again</button>
        : <button disabled>Game in Progress</button>
      }
      <div className="game__total-score">
          Total score: {totalStrokeScore}
      </div>
    </div>
  );
}
export default ScoreCard;
When I click on the button, the timer gets erratic and goes all over the place.
All I want to do is make it so that the timer counts down smoothly, gets the clicks the user made and add it to total score.
Why is
  useEffect(() => {
    countDown();
    console.log('Score in useeffect', strokeScore);
  }, [strokeScore]);
Breaking everything?