이 문서에서는 React의 핵심 개념과 실제 활용 방법을 자세히 알아봅니다.
Hooks 기초
Hooks란?
Hooks는 함수형 컴포넌트에서 React의 다양한 기능을 사용할 수 있게 해주는 함수들입니다. 클래스 컴포넌트의 기능을 함수형 컴포넌트에서도 사용할 수 있게 해줍니다.
useState
상태 관리를 위한 Hook입니다.
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>
증가
</button>
</div>
);
}
useEffect
부수 효과(side effects)를 처리하기 위한 Hook입니다. 데이터 가져오기, 구독 설정, DOM 수동 조작 등을 처리할 수 있습니다.
import { useEffect } from 'react';
function Example() {
useEffect(() => {
// API 호출 예시
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
}, []); // 빈 배열: 컴포넌트 마운트 시에만 실행
}
useContext
Context API를 통한 데이터 공유를 위한 Hook입니다.
import { createContext, useContext } from 'react';
const ThemeContext = createContext('light');
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button className={theme}>테마 적용 버튼</button>;
}
useRef
DOM 요소에 직접 접근하거나 변경 가능한 값을 저장하기 위한 Hook입니다.
import { useRef } from 'react';
function TextInputWithFocusButton() {
const inputEl = useRef(null);
const onButtonClick = () => {
inputEl.current.focus();
};
return (
<>
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>입력란 포커스</button>
</>
);
}
useMemo
계산 비용이 큰 값의 재사용을 위한 Hook입니다.
import { useMemo } from 'react';
function Example({ numbers }) {
const total = useMemo(() => {
return numbers.reduce((acc, cur) => acc + cur, 0);
}, [numbers]); // numbers가 변경될 때만 재계산
}
useCallback
함수의 재사용을 위한 Hook입니다.
import { useCallback } from 'react';
function Example() {
const handleClick = useCallback(() => {
console.log('버튼 클릭');
}, []); // 의존성 배열이 비어있으므로 함수가 재생성되지 않음
}
Custom Hooks
자주 사용되는 로직을 재사용 가능한 Hook으로 만들 수 있습니다.
function useInput(initialValue) {
const [value, setValue] = useState(initialValue);
const handleChange = (e) => {
setValue(e.target.value);
};
return [value, handleChange];
}
// 사용 예시
function NameForm() {
const [name, handleName] = useInput('');
return <input value={name} onChange={handleName} />;
}
학습 포인트
- 각 섹션의 예제 코드를 직접 실습해보세요.
- 이해가 안 되는 부분은 여러 번 읽고 실습하세요.
- 학습한 내용을 바탕으로 프로젝트를 만들어보세요.