STUDY/[ React ]

useState 와 useContext 차이점 및 context를 사용해야 하는 이유

Lim임 2025. 11. 26. 18:40

결론

자주 바뀌는 것, 적은 범위 = useState

기본적인 상태값(전역) = useContext

useContext를 사용하면 Provider 하위에 있는 모든 것들이 리렌더링하기 때문에 

자주 바뀌는 사항은 useState로 바꾸세용

1. useState와 useContext의 근본 차이

useState

  • 컴포넌트 내부에서만 관리되는 로컬 상태.
  • 그 컴포넌트 안에서만 쓰는 값이라면 useState가 딱 맞아.
  • 상태 변경되면 해당 컴포넌트만 리렌더링.

즉, “내가 갖고 있는 내 개인 state” 느낌.


useContext

  • 전역(혹은 광역) 상태 공유용.
  • 여러 컴포넌트가 같은 값을 필요로 할 때 사용.
  • Provider로 감싸진 모든 자식이 해당 상태를 공유하고 읽을 수 있음.

즉, “공용 창고: 누구나 꺼내서 쓸 수 있는 state” 느낌.


2. 왜 useState만 쓰면 안 되고 useContext가 필요한가?

이유 1: state를 많은 컴포넌트에 전달해야 할 때 “props drilling” 발생

예시)

 
App → AB → C → D

여기서 D만 필요한 값인데,
useState로 App에서 관리하면
A → B → C → D…
중간 컴포넌트가 쓰지도 않는 값이 props로 계속 전달됨.

이렇게 되는 걸 props drilling이라고 해.

→ 코드가 길어지고, 수정하기 어려워지고, 유지보수성 떨어짐.

 useContext를 쓰면?

중간 컴포넌트 거치지 않고 D가 바로 state에 접근 가능해짐.


이유 2: 여러 컴포넌트에서 동일한 state를 써야 할 때

예를 들어,

  • 로그인 정보
  • 유저 정보
  • 테마(light/dark)
  • 언어 설정
  • 장바구니 정보
  • 인증 토큰

이런 것들은 앱 곳곳에서 사용됨.

useState로 개별적으로 관리하면?

  • 컴포넌트마다 같은 state를 만들고
  • 변경하면 서로 안 맞아서
  • 동기화 문제 발생함.

useContext는 하나만 만들어두면

어디서든 동일한 상태를 읽고 쓸 수 있어.


이유 3: 규모가 커질수록 useState만으로는 구조가 망가지기 때문

초기엔 useState만으로도 충분해.
근데 프로젝트가 커지면:

  • 화면마다 상태 필요하고
  • 상태 공유 범위가 넓어지고
  • props 넘기기 복잡해지고

→ 자연스럽게 전역 상태 관리의 필요성이 커짐.

useContext는 그 “전역 관리”의 가장 기본적인 도구야.


3. 정리: 언제 무엇을 써야 하는가?

useState만 써도 되는 경우

  • 컴포넌트 안에서만 쓰는 값
    (버튼 눌렀는지, input 값, modal 열림/닫힘 등)
  • 다른 컴포넌트에서 필요 없다면 무조건 useState로 충분함.

useContext를 사용해야 하는 경우

  • 여러 컴포넌트에서 같은 데이터가 필요할 때
  • props drilling이 생기기 시작할 때
  • 전역 데이터가 필요할 때
  • 사용자 인증, 테마, 설정값, 언어 등 앱 전체 공통 상태일 때

예시

useState만 쓰다가 터지는 구조

 
App → Header → Navbar ↳ LogoutButton

"사용자 이름"을 LogoutButton에서 보여주고 싶다면?
App → Header → Navbar → LogoutButton으로 계속 props 넘겨야 함.

useContext로는?

Header, Navbar, LogoutButton 어디서든
UserContext에서 바로 꺼내 쓰면 끝.


핵심 요약

 

비교 useState useContext
관리 범위 컴포넌트 내부 앱 전역/여러 컴포넌트
목적 간단한 로컬 상태 상태 공유, props drilling 제거
리렌더 해당 컴포넌트만 Provider를 구독한 컴포넌트
쓰임새 폼, 토글 로그인, 테마, 장바구니 등

'STUDY > [ React ]' 카테고리의 다른 글

Hook이란? + 커스텀 Hook을 만들어보자  (0) 2025.11.27
리앧ㄱ트 컴포넌트만들기(추후추가)  (0) 2025.11.26
자주쓰는 React Hook 정리  (0) 2025.11.26
react 레이아웃 Context.Provider  (0) 2025.11.25
react new start  (0) 2025.11.22