React에서 애플리케이션 규모가 커짐에 따라 다양한 컴포넌트들이 서로 데이터를 공유해야 하는 경우가 빈번하게 발생합니다. 이때 모든 컴포넌트에서 데이터를 쉽게 접근하고 관리할 수 있도록 해주는 기능이 바로 Context API입니다. 이 글에서는 Context API의 개념과 사용 방법, 그리고 언제 사용하면 좋은지에 대해 알아보겠습니다.
Context API는 리액트에서 전역 상태를 관리하기 위한 내장 기능입니다. 여러 컴포넌트에서 공통으로 사용하는 데이터를 props drilling 없이 손쉽게 전달할 수 있도록 도와줍니다. 보통 리액트에서는 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달하기 위해 props를 사용하지만, 이 과정이 복잡해질 경우 코드의 유지보수가 어려워집니다. Context API를 사용하면 이러한 문제를 해결할 수 있습니다. 즉, 컴포넌트 트리 어디서든 데이터를 직접 접근할 수 있도록 하여, 복잡한 데이터 흐름을 간소화해줍니다.
Context API는 props drilling이 복잡하거나 비효율적일 때 유용합니다. 주로 다음과 같은 경우에 사용합니다
간단히 말해, 여러 컴포넌트가 동일한 데이터를 필요로 하고, 그 데이터를 최상위 컴포넌트에서부터 중첩된 컴포넌트들로 전달하는 것이 번거롭거나 코드의 복잡도를 증가시킬 때 Context API를 사용하면 유리합니다.
Context API를 사용하여 전역 상태를 관리하기 위해서는 세 가지 주요 단계가 필요합니다 createContext, Provider, 그리고 useContext입니다. 아래에서 각 단계를 살펴보고 간단한 예시 코드를 통해 이해해보겠습니다.
먼저, createContext
를 사용하여 전역 상태를 관리할 Context 객체를 생성합니다. 이 Context 객체는 React가 제공하는 특별한 객체로, 데이터가 담기며 여러 컴포넌트에서 접근할 수 있게 합니다.
import React, { createContext } from 'react';
// Context 생성
export const ThemeContext = createContext();
위 코드에서 ThemeContext
라는 Context를 생성했습니다. 이 객체는 이후에 Provider와 Consumer로 사용될 수 있습니다.
Provider
는 Context에서 제공하는 컴포넌트로, 자식 컴포넌트들에게 데이터를 공급합니다. Provider는 Context를 사용하여 모든 하위 컴포넌트들이 접근할 수 있는 전역 상태를 설정합니다.
import React, { useState } from 'react';
import { ThemeContext } from './ThemeContext';
const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState('light');
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{children}
</ThemeContext.Provider>
);
};
export default ThemeProvider;
ThemeProvider
컴포넌트는 theme
이라는 상태를 관리하고, 그 상태와 상태를 변경할 수 있는 setTheme
함수도 함께 제공합니다. 이 Provider로 감싼 모든 컴포넌트들은 theme
과 setTheme
에 접근할 수 있게 됩니다.
useContext
훅을 사용하면 Context에 저장된 값을 쉽게 가져올 수 있습니다. 이를 통해 원하는 곳에서 전역 상태를 사용할 수 있게 됩니다.
import React, { useContext } from 'react';
import { ThemeContext } from './ThemeContext';
const ThemedButton = () => {
const { theme, setTheme } = useContext(ThemeContext);
return (
<button
style={{
backgroundColor: theme === 'light' ? '#fff' : '#333',
color: theme === 'light' ? '#000' : '#fff'
}}
onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
>
Toggle Theme
</button>
);
};
export default ThemedButton;
위 코드에서 useContext
훅을 사용하여 ThemeContext
에 저장된 theme
과 setTheme
을 가져왔습니다. 버튼을 클릭할 때마다 테마를 변경할 수 있습니다.
React의 Context API는 여러 컴포넌트에서 공통 데이터를 쉽게 전달할 수 있도록 도와주는 강력한 도구입니다. 이를 통해 props drilling의 복잡함을 줄이고, 필요한 컴포넌트에서 손쉽게 데이터를 공유할 수 있습니다. 다만, 모든 상태를 Context로 관리하기보다는 필요한 부분에만 사용하여 성능 문제를 피하는 것이 중요합니다.
Context API를 잘 활용하면, 컴포넌트 구조의 복잡성을 줄이고 더 가독성 좋은 코드를 작성할 수 있습니다. 다음에 프로젝트에서 전역 상태 관리가 필요하다면 Context API를 고려해 보세요!