I'm working on building a clock that counts up, just a practice exercise (I know there are better ways of doing this).
My issue is when a minute is added, the "addMinute" seems to run twice, and I can't for the life of me figure out how or why.
Here is a demo on codesandbox: https://codesandbox.io/s/restless-frost-bud7p And here is the code at a glance:
(please note, the counter only counts up to 3 and counts faster; this is just for testing purposes)
const Clock = (props) => {
    const [seconds, setSeconds] = useState(0)
    const [minutes, setMinutes] = useState(0)
    const [hours, setHours] = useState(0)
    const addHour = () => {
        setHours(p => p + 1)
    }
    const addMinute = () => {
        setMinutes(prev => {
            if (prev === 3) {
                addHour()
                return 0
            } else {
                return prev + 1
            }
        })
    }
    const addSecond = () => {
        setSeconds(prevState => {
            if (prevState === 3) {
                addMinute()
                return 0
            } else {
                return prevState + 1
            }
        })
    }
    
    
    useEffect(() => {
        const timer = setInterval(addSecond, 600)
        return () => clearInterval(timer)
    }, [])
    return (
        <div>
            <h1>time!</h1>
            <p>
                {hours < 10 ? 0 : ""}{hours}
                :
                {minutes < 10 ? 0 : ""}{minutes}
                :
                {seconds < 10 ? 0 : ""}{seconds}
            </p>
            <p>
                {seconds.toString()}
            </p>
        </div>
    )
}
 
     
    