Type something to search...

7강. useContext로 전역 상태 관리

1. useContext로 전역 상태 관리

1.1. Context가 필요한 이유

Props를 여러 단계로 전달하는 것은 번거롭다. Context를 사용하면 전역적으로 데이터를 공유할 수 있다.

1.1.1. Props 전달의 문제점 (Prop Drilling)

// user를 Profile까지 보내려면 모든 중간 컴포넌트를 거쳐야 함
function App() {
const [user, setUser] = useState('김철수');
return <Page user={user} />;
}
function Page({ user }) {
return <Header user={user} />;
}
function Header({ user }) {
return <Profile user={user} />;
}
function Profile({ user }) {
return <div>{user}</div>;
}

1.2. Context 기본 사용법

1.2.1. 1단계: Context 생성

import { createContext } from 'react';
const UserContext = createContext();

1.2.2. 2단계: Provider로 값 제공

function App() {
const [user, setUser] = useState('김철수');
return (
<UserContext.Provider value={user}>
<Page />
</UserContext.Provider>
);
}

1.2.3. 3단계: useContext로 값 사용

import { useContext } from 'react';
function Profile() {
const user = useContext(UserContext);
return <div>사용자: {user}</div>;
}

1.3. 완전한 예제

import { createContext, useContext, useState } from 'react';
// Context 생성
const UserContext = createContext();
function App() {
const [user, setUser] = useState('김철수');
return (
<UserContext.Provider value={{ user, setUser }}>
<Page />
</UserContext.Provider>
);
}
function Page() {
return (
<div>
<h1>페이지</h1>
<Profile />
</div>
);
}
function Profile() {
const { user, setUser } = useContext(UserContext);
return (
<div>
<p>사용자: {user}</p>
<button onClick={() => setUser('이영희')}>이름 변경</button>
</div>
);
}

1.4. 정리

  • useContext는 데이터를 멀리 있는 컴포넌트까지 한 번에 전달할 때 사용한다
  • createContext()로 Context를 생성한다
  • Provider 컴포넌트로 하위 컴포넌트들에게 값을 전달한다
  • useContext(Context)로 전달된 값을 가져와 사용한다
  • 테마(Dark/Light), 로그인 정보, 다국어 설정 등에 주로 사용된다