티스토리 뷰
훅(Hook)이란?
- 함수형 컴포넌트에서 React의 상태(state)와 생명주기(lifecycle) 기능을 사용할 수 있게 해주는 함수
훅의 종류
React는 여러 가지 기본 훅을 제공한다. 가장 많이 사용되는 훅은 다음과 같다.
useState
: 상태를 관리useEffect
: 부수 효과(Side Effect)를 관리useContext
: Context API를 사용하여 전역 상태를 관리useReducer
: 복잡한 상태 로직을 관리
useState
와 useEffect
설명
1. useState
- 상태를 선언하고 업데이트할 수 있게 해주는 훅
- 상태가 변경되면 컴포넌트가 리렌더링된다.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0); // 초기값 0
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
2. useEffect
- 부수 효과를 수행하는 훅
- 컴포넌트가 렌더링된 후에 실행되며, 의존성 배열[]에 따라 실행 시점을 제어할 수 있다.
import React, { useState, useEffect } from 'react';
function Timer() {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setCount(prevCount => prevCount + 1);
}, 1000);
return () => {
clearInterval(timer); // 클린업 함수
};
}, []); // 빈 의존성 배열: 마운트 시 한 번만 실행
return <p>Count: {count}</p>;
}
useState
와 useEffect
를 함께 사용한 예시
useState
로 상태를 관리하고, useEffect
로 상태 변경에 따른 부수 효과를 처리하는 예시
import React, { useState, useEffect } from 'react';
function App() {
const [count, setCount] = useState(0);
const [message, setMessage] = useState('');
// count가 변경될 때마다 실행
useEffect(() => {
if (count > 10) {
setMessage('Count가 10을 넘었습니다!');
} else {
setMessage('Count가 10 이하입니다.');
}
}, [count]); // 의존성 배열: count
return (
<div>
<h1>Count: {count}</h1>
<p>{message}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
<button onClick={() => setCount(0)}>Reset</button>
</div>
);
}
export default App;
동작 설명
useState
:count
: 현재 카운트 값을 저장setCount
: 카운트 값을 업데이트message
: 상태에 따른 메시지를 저장
useEffect
:count
가 변경될 때마다 실행count
가 10을 넘으면 메시지를 업데이트
요약
- 훅(Hook)은 함수형 컴포넌트에서 상태와 생명주기를 관리할 수 있게 함.
useState
: 상태를 선언하고 업데이트useEffect
: side effect를 처리하고, 클린업 함수를 통해 리소스를 정리- 함께 사용:
useState
로 상태를 관리하고,useEffect
로 상태 변경에 따른 부수 효과를 처리
'Programming > React' 카테고리의 다른 글
[React] 상태 관리 전략 - 끌어올리기 : 컴포넌트 간 State 공유하기 (1) | 2025.02.23 |
---|---|
[React] 상태 관리 전략 : 끌어올리기 (0) | 2025.02.09 |
[React] React 훅(Hooks)의 정의와 특징 (0) | 2025.02.02 |
[React] React(TS) + Vite + npm(pnpm) 모노레포 프로젝트 구성하기 (2) | 2025.01.20 |