✨ Context API란?
- 전역 상태(
global state
) 값을 공유할 수 있도록 React에서 고안된 방법 - 주로 로그인한 유저 정보, 테마, 언어 등을 저장한다.
Prop Drilling
을 개선할 수 있다.
Prop Drilling
Prop Drilling은 컴포넌트 트리에서
컴포넌트에 직접적으로 필요한 데이터를 props로 전달받는 것이 아니라,
단순히 컴포넌트 트리의 하위 컴포넌트로의 props 전달을 위하여 데이터를 전달하는 과정이다.
✨ Context API 사용법
Context
의 사용법은 다음과 같다.
React.createContext(defaultValue)
Context
객체를 생성한다.createContext
함수를 호출하면Provider
와Consumer
컴포넌트를 반환한다.- 파라미터로 넘겨받는 값은
Provider
를 사용하지 않았을 때 적용될 초기값이다.
Context.Provider
context
의value
를 변경하는 역할을 한다.Provider
선언시value props
를 통해context
의value
를 입력받는다.- 이때
value
는context
를 통해 전역적으로 공유되는 값이다.
useContext Hook
context
의value
를 가져올 때 사용한다.- 파라미터로 넘겨받는 값은
createContex
를 통해 생성된Context
객체이다.
✨ 간단한 예제로 살펴보는 Context
아래의 코드는 ContextAPI
를 사용하여 전역 Language
값과 언어 설정을 변경하는 간단한 예제이다.
// Context 생성
const I18nContext = createContext(null);
function App() {
const [locale, setLocale] = useState('en');
const changeLocale = useCallback(
(locale) => {
setLocale(locale);
},
[setLocale]
);
// 현재 언어 정보와 언어를 변경하는 함수를 Context의 Provider에 세팅
// 해당 값은 모든 하위 트리에서 읽을 수 있음
return (
<I18nContext.Provider value={{ locale, changeLocale }}>
<LanguageButton />
</I18nContext.Provider>
);
}
const LanguageButton = () => {
// useContext를 사용하여 I18nContext의 값을 가져옴
const { locale, changeLocale } = useContext(I18nContext);
// 콘솔에 현재 언어 출력
useEffect(() => {
console.log('현재 언어:', locale);
}, [locale]);
const nextLanguage = useMemo(() => (locale === 'en' ? 'ko' : 'en'), [locale]);
// 버튼 클릭시 언어 변경
return (
<button onClick={() => changeLocale(nextLanguage)}>{nextLanguage}</button>
);
};
결과
✨ 공식문서
'Frontend' 카테고리의 다른 글
React-Query 정리 (0) | 2022.08.05 |
---|---|
[Javascript] Throttle 과 Debounce (0) | 2022.05.12 |
[Redux] 간단한 예제로 살펴보는 리덕스의 동작 원리 (0) | 2022.03.17 |
[Javascript] 변수, 호이스팅, TDZ (0) | 2022.03.07 |
[Typescript] Advanced-Types & Utility-Types 정리 (0) | 2022.03.02 |