Hooks를 사용합니다.
1. Timer구현할 컴포넌트 생성
props로 mm은 분(minutes)을, ss는 초(seconds)를 받아옴
import React, { useState, useEffect } from "react";
const Timer = ({ mm, ss }) => {
const [minutes, setMinutes] = useState(parseInt(mm));
const [seconds, setSeconds] = useState(parseInt(ss));
return (
<div>
{minutes}:{seconds < 10 ? `0${seconds}` : seconds}
</div>
);
};
export default Timer;
2. useEffect를 이용해 setInterval 선언
초가 0이면서 분도 0이 되면 카운트다운 종료이므로 clearInterval해줍니다.
parseInt를 안 해주면 뭔가.. 에러가 잘 나네요....
state값이 변경 될 때마다 useEffect가 실행되도록 minutes와 seconds 상태값을 인자값으로 넣어줍니다.
useEffect(() => {
const countdown = setInterval(() => {
if (parseInt(seconds) > 0) {
setSeconds(parseInt(seconds) - 1);
}
if (parseInt(seconds) === 0) {
if (parseInt(minutes) === 0) {
clearInterval(countdown);
} else {
setMinutes(parseInt(minutes) - 1);
setSeconds(59);
}
}
}, 1000);
return () => clearInterval(countdown);
}, [minutes, seconds]);
+) 참고
'STUDY > React' 카테고리의 다른 글
React | 페이지 이동 제어하기 ( prevent navigation | react-router-dom Prompt Custom) (0) | 2020.11.03 |
---|---|
React | react-datepicker (+ 커스텀) (0) | 2020.10.19 |
React | npm react-kakao-login (0) | 2020.10.13 |
React | icon 변경 (0) | 2020.09.29 |
React | 이미지 onError처리 (img onError) (0) | 2020.09.21 |