[React] new Date(), state를 활용한 동적인 현재시간 나타내기

2021. 7. 6. 17:50·Project/Timer Project
반응형


오류

import React, { useState } from 'react'

export default function App() {
  const [timer, setTimer] = useState('0');

  const currentTimer = () => {
    const date = new Date();
    const hours = String(date.getHours()).padStart(2, "0");
    const minutes = String(date.getMinutes()).padStart(2, "0");
    const seconds = String(date.getSeconds()).padStart(2, "0");
    return (`${hours}:${minutes}:${seconds}`)
  }
  const currentTime = currentTimer()
  setTimer(currentTime)
  return (
    <>
      <span>{timer}</span>
    </>
  )
}

처음 작성했던 코드인데 오류가 발생했다.

Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
에러: 재 렌더링이 너무 많다. React는 무한루프를 막기위해 렌더링 횟수를 제한한다. 

해결

return이 아닌 함수 내에서 바로 state에 저장을 해주었더니 오류가 사라졌다.

import React, { useState } from 'react'

export default function App() {
  const [timer, setTimer] = useState("00:00:00");

  const currentTimer = () => {
    const date = new Date();
    const hours = String(date.getHours()).padStart(2, "0");
    const minutes = String(date.getMinutes()).padStart(2, "0");
    const seconds = String(date.getSeconds()).padStart(2, "0");
    setTimer(`${hours}:${minutes}:${seconds}`)
  }

  const startTimer = () => {
    setInterval(currentTimer, 1000)
  }

  startTimer()

  return (
    <>
      <h1>{timer}</h1>
    </>
  )
}

느낀점

아직 React 사용이 익숙하지 못한것 같다. 역시 직접 해봐야 느낄수 있는것 같다.

내가 잘 알지 못하는 내용에 부딪히면서 꾸준히 공부해야겠다고 생각하게 되었다.

반응형
저작자표시 (새창열림)
'Project/Timer Project' 카테고리의 다른 글
  • [React] state를 활용한 동적인 타이머 만들기 - 시작, 정지, 리셋 기능 구현
  • [React] 타이머 만들기 react-compound-timer 라이브러리 활용
  • [JavaScript] 타이머 만들기 [배치 / 초기화버튼 / 마무리]
  • [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] new Date(), state를 활용한 동적인 현재시간 나타내기
상단으로

티스토리툴바