React의 Context API는 컴포넌트 계층 구조를 통해 데이터를 전역적으로 관리하고 쉽게 전달할 수 있도록 도와주는 기능입니다. 일반적으로 React에서 데이터를 자식 컴포넌트에 전달할 때는 props를 사용하지만, 여러 단계에 걸쳐 데이터를 전달해야 하는 경우 props drilling 문제가 발생할 수 있습니다. Context API는 이러한 불편함을 해결하여 복잡한 컴포넌트 계층 구조에서도 데이터를 쉽게 전달할 수 있도록 해줍니다.
Context API 주요 개념
1. Context 생성
• React.createContext() 함수를 사용하여 Context 객체를 생성합니다. 예를 들어, UserContext라는 Context를 생성하려면 다음과 같이 작성합니다:
const UserContext = React.createContext();
2. Provider
• Provider는 Context에서 데이터를 공급하는 역할을 하며, Context의 최상위 컴포넌트가 됩니다. Provider 컴포넌트는 value 속성을 통해 하위 컴포넌트로 전달될 값을 설정합니다.
• 예를 들어, UserContext의 Provider는 다음과 같이 사용할 수 있습니다:
<UserContext.Provider value={user}>
<App />
</UserContext.Provider>
• 이 경우, UserContext.Provider에 설정된 value 값은 하위 컴포넌트에서 접근할 수 있습니다.
3. Consumer
• Consumer는 Context의 값을 소비하는 역할을 합니다. Consumer 컴포넌트를 통해 Context에 접근할 수 있으며, 함수형 컴포넌트에서는 useContext 훅을 주로 사용합니다.
• 예를 들어 UserContext의 값을 사용하려면:
const user = useContext(UserContext);
• 이렇게 하면 user 객체를 Provider의 value 값으로 바로 가져올 수 있습니다.
4. useContext 훅
• useContext 훅은 함수형 컴포넌트에서 Context에 더 쉽게 접근할 수 있도록 도와줍니다. Consumer를 사용하지 않고도 Context의 값을 읽을 수 있기 때문에 코드가 간결해집니다.
Context API 사용 예시
import React, { createContext, useContext } from 'react';
// Context 생성
const ThemeContext = createContext();
function App() {
const theme = 'dark';
return (
<ThemeContext.Provider value={theme}>
<Toolbar />
</ThemeContext.Provider>
);
}
function Toolbar() {
return (
<div>
<ThemedButton />
</div>
);
}
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button style={{ background: theme === 'dark' ? '#333' : '#fff' }}>Themed Button</button>;
}
위 예제에서 ThemeContext.Provider를 통해 theme 값을 ThemedButton까지 전달할 수 있습니다. 이 과정에서 props를 사용하지 않고 Context로 직접 전달하기 때문에 계층이 깊어져도 props drilling 문제를 피할 수 있습니다.
Context API의 장점
• 데이터 전역 관리: 전역 데이터, 특히 사용자 정보, 테마, 언어 설정 등을 여러 컴포넌트에서 일관되게 사용할 수 있습니다.
• props drilling 문제 해결: 여러 컴포넌트 계층을 거칠 필요 없이 필요한 데이터에 직접 접근할 수 있습니다.
• 코드의 간결화: useContext 훅을 통해 코드가 간결해지고 관리하기 쉬워집니다.
Context API의 주의사항
• 과도한 사용 피하기: 모든 상태를 Context로 관리하면 컴포넌트가 자주 리렌더링될 수 있어 성능이 저하될 수 있습니다. 이 경우 Redux와 같은 상태 관리 라이브러리를 사용하여 효율적으로 상태를 관리하는 것이 좋습니다.
• 컨텍스트 분리: 여러 가지 데이터를 Context로 관리할 때는 주제별로 Context를 분리하여 사용하는 것이 성능 및 유지 관리 측면에서 좋습니다.
React의 Context API는 간단한 전역 상태 관리에 매우 유용하며, props 전달 문제를 효과적으로 해결해주는 좋은 도구입니다.
'React' 카테고리의 다른 글
React의 Hook (2) | 2024.11.11 |
---|---|
Cross-Platform (0) | 2024.11.11 |
React의 Props (1) | 2024.11.11 |
React의 이벤트 핸들링 (0) | 2024.11.11 |
React의 컴포넌트와 JSX (0) | 2024.11.11 |