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), 로그인 정보, 다국어 설정 등에 주로 사용된다