React Hooks
2025. 4. 1. 00:39ㆍFrameworks/React
React Hooks
Hooks는 함수형 컴포넌트에서 상태 관리와 생명주기 기능을 사용할 수 있게 해주는 기능입니다.
1. useState
상태를 관리하기 위한 Hook입니다.
const [state, setState] = useState(initialValue);
사용 예시:
function LoginForm() {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const [isLoggedIn, setIsLoggedIn] = useState(false);
function handleSubmit(e) {
e.preventDefault();
// 로그인 로직...
setIsLoggedIn(true);
}
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
/>
<button type="submit">로그인</button>
</form>
);
}
2. useEffect
부수 효과(side effects)를 수행하기 위한 Hook입니다. 데이터 가져오기, 구독 설정, DOM 조작 등에 사용됩니다.
useEffect(() => {
// 컴포넌트가 마운트되거나 업데이트될 때 실행되는 코드
document.title = `카운트: ${count}`;
// 선택적 정리(cleanup) 함수
return () => {
// 컴포넌트가 언마운트되거나 다음 효과가 실행되기 전에 실행
};
}, [count]); // 의존성 배열: count가 변경될 때만 효과 실행
useEffect 사용 패턴:
- 마운트/언마운트 시 실행 (의존성 배열이 빈 배열)
- useEffect(() => { console.log('컴포넌트가 마운트되었습니다.'); return () => { console.log('컴포넌트가 언마운트되었습니다.'); }; }, []);
- 특정 값 변경 시 실행
- useEffect(() => { console.log(`username이 ${username}로 변경되었습니다.`); }, [username]);
- API 데이터 가져오기
- useEffect(() => { let isMounted = true; async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); if (isMounted) { setData(data); } } catch (error) { if (isMounted) { setError(error); } } finally { if (isMounted) { setLoading(false); } } } fetchData(); return () => { isMounted = false; }; }, []);
3. useContext
컴포넌트 트리를 통해 데이터를 전역적으로 공유할 수 있게 해주는 Hook입니다.
// 컨텍스트 생성
const ThemeContext = React.createContext('light');
// 부모 컴포넌트
function App() {
const [theme, setTheme] = useState('light');
return (
<ThemeContext.Provider value={theme}>
<div className="app">
<Header />
<MainContent />
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
테마 변경
</button>
</div>
</ThemeContext.Provider>
);
}
// 자식 컴포넌트
function ThemedButton() {
const theme = useContext(ThemeContext);
return (
<button className={`button-${theme}`}>
{theme} 모드 버튼
</button>
);
}
'Frameworks > React' 카테고리의 다른 글
| React Router의 주요 기능 상세 설명 (0) | 2025.04.01 |
|---|---|
| React Router (0) | 2025.04.01 |
| 간단한 React 애플리케이션 예제 (0) | 2025.04.01 |
| React 기본 개념 (0) | 2025.04.01 |
| React 소개 (0) | 2025.04.01 |