blog

React 훅으로 카운트다운 타이머 컴포넌트 감싸기

React Hook은 카운트다운 타이머 컴포넌트를 캡슐화하며, React Hook을 사용하면 React의 기능을 사용할 수 있을 뿐만 아니라 공용 로직의 장점을 캡슐화할 수 있습니...

Oct 18, 2025 · 1 min. read
シェア
import { Button } from "antd"; import { useCountDown } from "./useCountDown.tsx"; export default function App() { const [time, startTime, canEdit, text] = useCountDown(5, "캡차 가져오기"); return ( <div className="App"> <Button onClick={startTime} type="primary" disabled={!canEdit}> {text} </Button> </div> ); }
import { useEffect, useRef, useState } from "react"; export const useCountDown = (initTime: number, initText: string) => { const [time, setTime] = useState(initTime); const [canEdit, setCanEdit] = useState(true); const [text, setText] = useState(initText); const timerRef: any = useRef(); useEffect(() => { if (time < 0) { clearInterval(timerRef.current); setCanEdit(true); setText(initText); } else { if (time < initTime) { setText(`검색 (${time}s)`); } } }, [time]); useEffect(() => { // 컴포넌트가 파괴되면 타이머를 지워야 합니다. // 위의 사용 효과에서 효과가 지워지면 커밋 단계의 변이 하위 단계에서 반환 콜백 메서드를 호출하여 타이머를 지웁니다. return () => { clearInterval(timerRef.current); }; }, []); const startTime = () => { setCanEdit(false); setText(`검색 (${time}s)`); if (!timerRef.current) { timerRef.current = setInterval(() => { setTime((t) => t - 1); }, 1000); } }; return [time, startTime, canEdit, text]; };
Read next

안드로이드 파이널 빅 과제 - 안드로이드 바운싱 볼 미니 게임

설명: 초보 학습자에게 적합한 AndEnginePhysicsBox2D 게임 개발 엔진 개발을 사용한 바운싱 볼 게임입니다. 시작하기 메뉴의 안드로이드스튜디오 프로젝트 빌드 튜토리얼을 참조하세요. 구현 방법에 대해 묻지 마세요.

Oct 18, 2025 · 1 min read