Hooks
- React life cycle을 이해하기 위해 알아야 함.
- 종류
- useState
- useEffect
- useCallback
- useMemo, useContext, useRef, useLayoutEffect
useState
/**
* useState: 상태 값과 그 값을 갱신하는 함수를 반환
* - 인자: 초기 상태 값
* - 반환: [상태 변수, 상태에 대한 Setter]
*/
const [value, setValue] = useState(0);
useEffect
/**
* useEffect: 컴포넌트가 렌더링 될 때, 특정 작업을 실행
* - 인자
* - 실행하고자 하는 함수 (effect callback)
* - effect는 정리(clean-up) 함수를 반환할 수 있음
* - 반환된 함수는 컴포넌트가 언마운트 또는 effect 재실행 이전에 실행됨
* - 의존성 배열 (dependency list)
*/
useEffect(() => {
console.log("[Function] useEffect []: 컴포넌트가 마운트 될 때, 한 번만!");
//마운트가 됐을 때! eventListener를 넣기 (밖에 두면 이벤트가 중복돼서 만들어짐)
//document.body.addEventListener('click', ()=>{console.log('click body');});
//언마운트가 됐을 때 남아있는 리소스를 제거해야 이벤트가 발생하는 문제를 해결할 수 있음!!
const eventHandler = () => {console.log('click body')};
document.body.addEventListener('click', eventHandler);
return () => { //cleanup함수라고 함.
console.log("[Function] useEffect return []: 컴포넌트가 언마운트 될 때,");
document.body.removeEventListener('click', eventHandler);
};
}, []);
useEffect(() => {
console.log(
"[Function] useEffect [value]: 컴포넌트가 마운트 될 때, + value가 변경되면,"
);
return () => { //cleanup함수라고 함.
console.log(
"[Function] useEffect return [value]: 새로 useEffect를 수행하기 전에,"
);
};
}, [value]); //두번째 인자에 이렇게 넣고, value가 변경될 때 실행하도록할 수 있음
//value가 변경되고 -> 다시 랜더링되면서 컴포넌트의 첫줄부터 시작 -> useEffect return(cleanup함수) ->
//useEffect의 첫줄 실행되는 순으로 진행됨.
useCallback
- 성능을 위해서
/**
* useCallback: 메모이제이션된 콜백을 반환
* - 인자
* - 메모이제이션 할 함수
* - 의존성 배열
* - 반환: 메모이제이션 된 함수
* *의존성 배열을 제대로 셋팅하지 않으면 함수 안에서 사용되는 값이 업데이트 되지 않은 값일 수 있음
*/
//[비교] useCallback 없이 사용할 때, 리랜더링될 때마다 아래 함수를 계속 만들어줌 ... 가비지컬랙터가 작동된다고 해도 중복해서 만드는 것은 성능에 좋지 않다.
const increaseValue = () => {setValue(value+1);};
//[비교] useCallback, 처음에 랜더링됐을 때 한번 만들어놨으면 두번째 랜더링에 와서 기존에 있던 걸 기억해서 재활용하는 식으로 동작
const increaseValue = useCallback(
() => {setValue(value + 1);}, [value] //value 값이 변할 때, 함수 만들도록 함. value가 없다면 1.. (처음 value값이 0일 때.. 계속 재활용하면 1로 세팅)
);
//사실 위 상황은 useCallback이 필요한 상황이 아님. (예시를 위한 것일 뿐)
const resetValue = useCallback(() => { setValue(0); }); //value와 같은 디펜던시가 없음. 처음 만든 함수를 계속 재활용해도 된다는 소리임.
return (
<div>
<h1>value: {value}</h1>
<button onClick={increaseValue}>Increase value</button>
</div>
);
Hooks를 사용할 때 주의사항
- 조건문 안에 사용해서는 안 된다.
- React 컴포넌트에서만 사이클 관리를 위해 쓰이는 것이기 때문에 함수 안에 사용해서도 안 된다.
React 랜더링 과정
클래스형 컴포넌트의 Life Cycle

함수형 컴포넌트의 Life Cycle

'Javascript > React' 카테고리의 다른 글
| React 이벤트 핸들링 (2) | 2025.01.09 |
|---|---|
| 컴포넌트, Props, State (3) | 2025.01.07 |
| React JSX (javascript xml) (1) | 2025.01.06 |
| React란? (0) | 2025.01.06 |