2025-08-02 16:04
Status:
Tags: 리액트 넥스트
리액트 훅
- 함수형 컴포넌트에서 상태 관리, 생명주기 관리, 컨텍스트, 최적화 등 할 수 있게 해주는 특수 함수
 - 작은 함수를 모아 복잡한 로직을 구현하는 컴포넌트와 함수형 프로그래밍 의 철학 따름
 - 조합 우선: 작은 부품들을 조합하여 복잡한 시스템 구축
 - 선언적 API: “무엇을” 원하는지 선언하면 “어떻게”는 라이브러리가 처리
 - 함수형 패러다임: 순수성, 불변성, 예측 가능성 중시
 
도입 배경
- 
맨 처음 리액트는 React.createClass() 방식으로 컴포넌트를 만들었음
 - 
그 후 ES6 로 클래스 문법 도입
 - 
클래스 컴포넌트는 this 바인딩이나 생명 주기 메서드, HOC 패턴의 복잡성 등 문제 있음
 - 
2018년 리액트 팀에서 공식적으로 아래 이유로 훅 필요성 설명
- 컴포넌트 간 상태 로직 재사용 어려움
 - 복잡한 컴포넌트 이해 어려움
 - 클래스가 사람과 기계 모두에게 혼란스러움
 
 
종류 및 사용법
- State (상태), Context, Ref, Effect, Performance, 기타로 구분
 - 최상단에서만 호출 (이유는 3.2 연결 리스트(Linked List)로 훅 순서 관리)에 있는데 자바스크립트 공부 정리하면서 다시 이해하자,연결 리스트 때문인거 같은데 명확히는 이해 못함
 - 이전에 래퍼로 싸서 복잡했던 로직을 기능과 ui 를 분리하는 식의 추출이 쉬워짐
 - 커스텀 훅은 use 로 시작해서 여러 훅을 조합해 함수로 만들 수 있다.
 - 하나의 훅은 하나의 기능만 하는 것이 원칙
 
| 분류 | 훅 이름 | 역할 및 예시 | 
|---|---|---|
| State Hooks | useState, useReducer | 상태 선언(useState(0)), 복잡 로직 시 리듀서 활용 | 
| Context Hooks | useContext | Context 구독(const theme = useContext(ThemeCtx)) | 
| Ref Hooks | useRef, useImperativeHandle | DOM 노드·값 레퍼런스(const ref = useRef(null)) | 
| Effect Hooks | useEffect, useLayoutEffect, useInsertionEffect | 사이드 이펙트 관리(useEffect(()=>{},[])) | 
| Performance | useMemo, useCallback, useTransition, useDeferredValue | 계산·함수 캐싱, 업데이트 우선순위 제어 | 
| 기타 | useDebugValue, useId, useSyncExternalStore, useActionState | DevTools 표시, 고유 ID 생성, 외부 스토어 구독 등 | 
References
리액트 훅(React Hooks) 등장의 역사적 배경 리액트 훅(React Hooks) 핸드북 클래스 컴포넌트와 함수 컴포넌트의 본질적 차이 및 리액트 훅의 작동 원리 최신 전역 상태 관리 라이브러리들과 리액트 훅의 철학 비교 분석