함수형 컴포넌트에서 상태 관리를 할 수 있게 해주며, 라이프사이클 메서드를 사용할 수 있게 준다. 이전에는 이런 기능들을 사용하기 위해 클래스 컴포넌트를 사용해야 했지만, Hook의 등장으로 함수형 컴포넌트에서도 가능하게 되었다.
Hook은 이름이 'use'로 시작하는 함수들을 의미하며, 아래와 같은 특징을 가지고 있다.
1. useState
Hook을 사용하면 함수형 컴포넌트에서 State를 가질 수 있다. 이를 통해 함수형 컴포넌트에서도 동적인 데이터를 다룰 수 있게 되었습니다.
2. useEffect
Hook을 사용하면 함수형 컴포넌트에서 componentDidMount, componentDidUpdate, componentWillUnmount와 같은 라이프사이클 메서드의 역할을 수행할 수 있다.
3. 특정 로직을 묶어서 재사용할 수 있는 커스텀 Hook을 만들 수 있다. 아래는 간단한 예시이다. 커스텀 Hook을 만드는건 일반적인 자바스크립트의 함수를 만드는 것과 크게 다르지 않다.
import { useState, useEffect } from 'react';
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchData = async () => {
const response = await fetch(url);
const data = await response.json();
setData(data);
setLoading(false);
};
fetchData();
}, [url]); // URL이 변경될 때만 새로운 데이터를 가져온다.
return [data, loading];
}
4. useContext
Hook을 사용하면 React Context를 더욱 쉽게 사용할 수 있다. 이를 통해 props를 중첩하여 전달하는 것 없이 컴포넌트 트리 안에서 데이터를 공유할 수 있다.
이 외에도 useReducer
, useRef
, useMemo
, useCallback
등과 같은 다양한 Hook들이 있다. 이들은 상태 관리, 성능 최적화, 참조 관리 등 다양한 용도로 사용된다.
Hook을 사용하는 이유는 보통 React 개발을 더욱 간결하고 가독성 좋게 만들어주기 때문이다.