[React] 타이머 만들기 react-compound-timer 라이브러리 활용

2021. 7. 7. 14:30·Project/Timer Project
반응형

react-compound-timer

라이브러리를 사용하여 타이머를 만들어보았다.

https://www.npmjs.com/package/react-compound-timer

 

react-compound-timer

Timer compound react component

www.npmjs.com

코드에 관한 설명은 위 링크 내용을 참고해주세요

import React from 'react'
import Timer from 'react-compound-timer/build';

export default function SetTimer() {

    const Hours = Timer.Hours
    const Minutes = Timer.Minutes
    const Seconds = Timer.Seconds

    console.dir(Timer)

    return (
     <Timer startImmediately={false} >
            {({ start, resume, pause, stop, reset, timerState }) => (
                <React.Fragment>
                    <div>
                        <span><Hours /> : hours </span>
                        <span><Timer.Minutes /> : minutes </span>
                        <span><Timer.Seconds /> : seconds </span>
                    </div>
                    <br />
                    <div>
                        <button onClick={start}>Start</button>
                        <button onClick={pause}>Pause</button>
                        <button onClick={resume}>Resume</button>
                        <button onClick={stop}>Stop</button>
                        <button onClick={reset}>Reset</button>
                    </div>
                </React.Fragment>
            )}
        </Timer>
    )
}
라이브러리를 통해 타이머는 정상 동작을 한다.

출력 결과

문제

위 결과 처럼 1분 1초 상태가 아닌 01분 01초로 나타나길 원한다.

//Seconds에 조건을 걸어주려 했음
    let Seconds = Timer.Seconds
    Seconds = `${Seconds < 10 ? `0${Seconds}` : Seconds} `;
//Seconds를 받아올때 0을 추가해주려 했음
	const Seconds = String(Timer.Seconds.padStart(2, "0"))
위 방법들은 오류가 발생했다. 그 이유는 Timer.Seconds의 type이 function이여서 그런것 같다.

해결

React가 아직 익숙하지 않지만 스스로 타이머를 만들어보는것이 더 의미가 있을것이라 생각하여 직접 만들게 되었다.

00:00:00 으로 나오는것도 해결되었다.
import React, { useState } from 'react'

export default function SetTimer() {
//시간, 분, 초를 따로 저장해 두었다.
    const [currentHours, setCurrentHours] = useState(0);
    const [currentMinutes, setCurrentMinutes] = useState(0);
    const [currentSeconds, setCurrentSeconds] = useState(0);

// TIME에 따라 시,분,초 가 변경되도록 하기위해 TIME값을 따로 만들었다.
    let TIME = 0;
    let cron;

    const startButton = () => {
        updateTimer();
        cron = setInterval(updateTimer, 1000);
    };

    const updateTimer = () => {
        const checkMinutes = Math.floor(TIME / 60);
        const hours = Math.floor(TIME / 3600);
        const minutes = checkMinutes % 60;
        const seconds = TIME % 60;
        setCurrentHours(hours)
        setCurrentSeconds(seconds)
        setCurrentMinutes(minutes)
        TIME++;
    }

    return (
        <>
            <h1>{currentHours < 10 ? `0${currentHours}` : currentHours}:{
                currentMinutes < 10 ? `0${currentMinutes}` : currentMinutes}:{
                    currentSeconds < 10 ? `0${currentSeconds}` : currentSeconds}</h1>
            <button onClick={startButton}>시작</button>
        </>
    )
}

실행화면

결과

https://ssc9811.github.io/Study_Helper/

 

TimerUp

 

ssc9811.github.io

위 사이트는 Vanilla JS로 타이머를 만들었던 내용이다.

React로 해도 금방 만들 수 있을거라 생각했는데 Hook과 React 특유의 작동방식등이 Vanilla JS와는 다른점이있어서
오류가 많이 발생하고 있다. 어려움의 연속인것 같다.

반응형
저작자표시 (새창열림)
'Project/Timer Project' 카테고리의 다른 글
  • [React] 동적인 타이머 만들기 React에서 FontAwesome 아이콘 사용/ 기본 배치 CSS
  • [React] state를 활용한 동적인 타이머 만들기 - 시작, 정지, 리셋 기능 구현
  • [React] new Date(), state를 활용한 동적인 현재시간 나타내기
  • [JavaScript] 타이머 만들기 [배치 / 초기화버튼 / 마무리]
꾸매코더
꾸매코더
웹 / 앱 개발자
  • 꾸매코더
    꾸매코딩
    꾸매코더
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • JavaScript (18)
        • Deep Dive (0)
      • React (5)
      • React-Native (9)
      • CSS (3)
      • TypeScript (1)
      • CS (10)
      • GitHub (4)
      • Clone Coding (15)
        • Kakaotalk [HTML + CSS] (10)
        • Momentum [JavaScript] (5)
      • Project (30)
        • Timer Project (14)
        • Netflix [React + Hooks] (12)
        • ToDoList [React-Native] (4)
      • 회고 (1)
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
꾸매코더
[React] 타이머 만들기 react-compound-timer 라이브러리 활용
상단으로

티스토리툴바