250x250
반응형
arkhyeon
arkhyeon
arkhyeon
전체 방문자
오늘
어제
  • 분류 전체보기 (89)
    • Spring (5)
    • Java (4)
    • React (26)
      • TypeScript (6)
      • JavaScript (1)
      • Jest (9)
    • NEXT (8)
    • SQL (1)
    • React native (1)
    • CSS (3)
    • Web (1)
    • Git (3)
    • ETC (6)
    • 빅데이터DB (8)
    • Docker (4)
    • Tool (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react19
  • kudu
  • react
  • react websocket
  • react usetransition
  • Spring WebSocket
  • react jest
  • jest
  • react spring websocket
  • websocket server
  • usetransition
  • node WebSocket
  • react loading
  • javascript wss
  • HIVE
  • docker tomcat
  • WSS
  • react typescript
  • websocket
  • javasciprt websocket

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
arkhyeon

arkhyeon

React

React 19.2 커스텀 훅 네이밍 규칙 및 인식 원리

2025. 11. 11. 17:14
728x90
반응형

1️⃣ 문제 요약

// 잘못된 예시 
const { loading, menuRole } = UseMenuRole(); // 대문자로 시작

 

위와 같이 훅 이름을 대문자로 시작하면 React는 이 함수를 컴포넌트로 인식하지 훅으로 인식하지 않습니다.

그 결과,

  • useState, useEffect 등의 내부 상태 변화가 React 렌더링 사이클에 반영되지 않음
  • setState()가 실행돼도 화면이 갱신되지 않음
  • 내부 상태(menuRole, loading)는 변하지만 UI는 그대로 멈춘 상태

이런 현상이 발생합니다.


2️⃣ React의 훅 인식 규칙

React는 내부적으로 훅 호출을 추적할 때 다음과 같은 규칙을 사용합니다.

  React가 인식하는 대상 예시
컴포넌트 대문자로 시작하는 함수 function App(), function SomePage()
훅 use로 시작하는 함수 useState, useEffect, useUser, useMenuRole

따라서 커스텀 훅을 작성할 때는 반드시
👉 use로 시작하는 이름을 사용해야 React가 인식하고 상태를 추적합니다.


3️⃣ 올바른 예시

// ✅ 커스텀 훅 정의
export const useMenuRole = () => {
  const [menuRole, setMenuRole] = useState(0);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    // ... 로직
  }, []);

  return { menuRole, loading };
};

// ✅ 훅 사용
function SomePage() {
  const { menuRole, loading } = useMenuRole();

  if (loading) return <div>로딩중...</div>;
  return <div>메뉴 권한: {menuRole}</div>;
}

useMenuRole()을 호출한 위치를 기억하고, 내부의 useState / useEffect 변경 시 자동으로 해당 컴포넌트를 리렌더링합니다.


4️⃣ 잘못된 예시

 
// ❌ 대문자로 시작한 훅
export const UseMenuRole = () => {
  const [menuRole, setMenuRole] = useState(0);
  ...
};

// ❌ 훅 호출
function SomePage() {
  const { menuRole, loading } = UseMenuRole(); // ❌ React는 이걸 훅으로 인식하지 않음
  ...
}

React는 이 코드를 “일반 함수 호출” 로 처리하기 때문에 setMenuRole() 호출 시 컴포넌트가 리렌더되지 않습니다.


5️⃣ 정리 요약

항목설명
✅ 커스텀 훅 네이밍 use로 시작 (소문자)
🚫 잘못된 네이밍 대문자 시작 (UseSomething)
❗ 이유 React 훅 트래킹 규칙: use prefix 필수
🔁 증상 state는 변하지만 렌더링 안 됨
🩹 해결 훅 이름을 useMenuRole처럼 소문자 use로 시작하게 변경

📎 결론

React 훅은 반드시 use로 시작해야 React가 내부적으로 상태 변경을 추적하고 리렌더링을 수행한다.
대문자로 시작하면 단순 함수로 처리되어 상태 변화가 UI에 반영되지 않는다.

728x90
반응형

'React' 카테고리의 다른 글

useDeferredValue 와 useTransition 차이  (0) 2025.01.13
React 19 Data Caching (map, React Query, swr)  (0) 2025.01.13
React Suspense와 use로 빈 데이터 문제 해결하기  (0) 2025.01.10
React 19 useTransition을 활용한 Axios 데이터 로딩과 상태 업데이트  (0) 2025.01.10
React 19의 useTransition을 활용한 비동기 상태 업데이트와 UI 반응성 향상  (0) 2025.01.09
    'React' 카테고리의 다른 글
    • useDeferredValue 와 useTransition 차이
    • React 19 Data Caching (map, React Query, swr)
    • React Suspense와 use로 빈 데이터 문제 해결하기
    • React 19 useTransition을 활용한 Axios 데이터 로딩과 상태 업데이트
    arkhyeon
    arkhyeon

    티스토리툴바