React
React Hook:<useState, useEffect>
wlals5855
2024. 9. 16. 13:12
Hook
리액트 함수형 컴포넌트에서 사용할 수 있는 기능의 모음
문법체계가 "use-"로 시작
✔️useState
✅ 함수형 컴포넌트 / 상태관리 함수 / Hook
<기본형태>
const [state, setState] = useState<타입>(초기값);
[state, setState] : [상태변수, 상태업데이트 함수]
const 상태변수 = 초기값;
const 상태업데이트 함수 = () => { 반한값(익명함수)}
✅구조분에 할당을 꼭 기억하자
const [a, b] = [1, 2];
=> const a = 1; + const b = 2;
밑에 두 함수를 더한 것과 같다.
<예제함수>
export default function UseState(){
const [count, setCount] = useState<number>(0);
const handleCountClickBtn = () => {
setCount(prevCount => prevCount + 1);
}
return(
<div>
<h2>Count: {count}</h2>
<button onClick={handleCountClickBtn}>카운트</button>
</div>
)
}
✔️ useEffect
✅함수형 컴포넌트 / 렌더링 될 때와 특정 상태가 변경될 때 실행되는 부수효과 처리 / Hook
✅사용방법
데이터 가져오기(fetching Data), 타이머 설정, 이벤트리스너 등록에 사용됨
참고) 컴포넌트가 생성될 때 (마운트), 컴포넌트가 제거될 때 (언마운트) 특정 상태나 prop가 변경될 때 호출
✅사용방법
첫 번째 인자 : 부수효과
두 번째 인자 : 의존성 배열(deps -dependecies)
useEffect(() => {
-부수효과 코드를 작성
return () => {
- 정리(clean-up) 코드
- 언마운트 시 실행
}
},[의존성 배열을 작성]);
참고) 의존성 배열
빈 배열 - 컴포넌트가 마운트될 때 한번만 실행
값이 있는 배열 - 해당 값이 변경될 때마다 실행(여러 개 가능)
<예제함수>
export default function UseEffect() {
const [count, setCount] = useState<number>(0);
const [isRunning, setIsRunning] = useState<boolean>(false);
useEffect(() => {
// 타이머 효과를 구현
let interval: NodeJS.Timeout | undefined;
if(isRunning) {
interval = setInterval(() => {
setCount(prevSetCount => prevSetCount + 1);
}, 1000) // 1000 = 1sc :
// 1초에 count에 1씩 더 한다는 의미
}
return () => clearInterval(interval);
}, [isRunning]);
// isRunning이 true인 동안
const handleButtonClick = () => {
setIsRunning(prevState => !prevState);
// isRunning의 상태를 현태 상태에서 역전을 한다는 의미
// true => false / flase => true로 역전된다.
}
return (
<div>
<p>Timer: {count} seconds</p>
<button onClick={handleButtonClick}>
{/* 실행 중이면 'Stop'버튼으로, 실행 중이 안면 'Start'버튼*/}
{isRunning ? 'Stop' : 'Start'}
{/*isRunning이 true면 Stop, false면 Start를 번튼에 출력한다.*/}
</button>
</div>
)
}