본문 바로가기
개인 공부/타이머

2. padStart, setTimeout

by 갱생angel 2024. 1. 26.

<추가 사항>

※00 : 00(분 : 초) 형식으로 업그레이드

  -padStart 함수로 1 => 01 형식으로 변환

  -setTimeout 함수로 함수 실행 잠시 지연

  -타이머 리셋해서 다시 작동

 

component

  -Button.jsx

page

  -Timer.jsx

 

page - <Timer.jsx>

import React, {useCallback, useEffect, useState} from 'react'
import Button from '../component/Button'

function Timer() {
  const [timeOut, setTimeOut] = useState(true)

  const [second, setSecond] = useState(10)
  const [minuts, setMinuts] = useState(2)
  
  const reduceSecond = () => setSecond(second => Math.max(second - 1, 0))
  const reduceMinuts = () => setMinuts(minuts => Math.max(minuts - 1, 0))

  const secondTimer = String(second).padStart(2, 0) //00 : 00 형식으로 변환
  const minutsTimer = String(minuts).padStart(2, 0)
  
  const timeDelay = useCallback(() => {
    setTimeout(() => { //함수 실행을 1초 지연
      reduceMinuts()
      setSecond(59)
    }, 1000)
  }, [])
    
  const handleResetTimerButton = () => { //타이머 리셋
    setTimeOut(true)
    setSecond(10)
    setMinuts(2)
  }

  useEffect(() => {
    const reduce = setInterval(reduceSecond, 1000)
    return () => clearInterval(reduce)
  })
  
  useEffect(() => {
    if (minuts === 0 && second === 0) { //00 : 00 이면 타임아웃
      setTimeOut(false)
    } else if (second === 0) { //초가 00이 되면 분 1 감소
      timeDelay()
    }
  }, [minuts, second, timeDelay])

  return (
    <div>
      {timeOut ? (
        <div>
          <h2>{`${minutsTimer} : ${secondTimer}`}</h2>
        </div>
      ) : (
        <div>
          <h2>Time Out!!!</h2>
          <Button name={'Reset'} onClick={handleResetTimerButton} />
        </div>
      )}
    </div>
  )
}

export default Timer

 

'개인 공부 > 타이머' 카테고리의 다른 글

COMPLETE TIMER  (0) 2024.02.07
4. HOUR, STOP/RESTART, RESET  (0) 2024.02.07
3. Time Input  (0) 2024.01.26
1. Basic Timer  (0) 2024.01.25