context와 전역 상태 라이브러리 모두 Prop Drilling과 같은 문제점을 해결하기 위해
사용해왔는데 이 둘의 차이와 적절한 사용 방법에 대해 알고 싶어졌다.
👀 여기서 Prop Drilling의 문제점은 prop을 깊이 전달할 경우 전달받은 prop이 어떤 컴포넌트로부터 왔는지 파악이 어려울 수 있고, 이럴 경우 오류 발생 시 추적이 힘들어질 수 있다는 점이다.
전역 데이터를 관리할 수 있는 API
context의 사용 순서는 크게 3가지로 나눌 수 있다.
1. context 생성: createContext
2. context 전달: Provider
3. context 변화 감지: Consumer
// context/FamilyContext.js
import { createContext } from "react";
export const FamilyContext = createContext(null); // 상태의 초기값 설정
import React from "react";
import { FamilyContext } from "../context/FamilyContext";
import Father from "./Father";
function GrandFather() {
const houseName = "Kim";
const poketMoney = 10000;
return (
<FamilyContext.Provider // provider로 값을 내려준다.
value={{
houseName,
poketMoney,
}}
>
<Father /> // 값을 제공받을 하위 컴포넌트
</FamilyContext.Provider>
);
}
export default GrandFather;
import React, { useContext } from "react";
import { FamilyContext } from "../context/FamilyContext";
function Child() {
const data = useContext(FamilyContext); // 값 가져오기
console.log("data", data);
return (
<div>
<p>집 이름 : {data.houseName}</p>
<p>용돈 : {data.poketMoney}</p>
</div>
);
}
export default Child;
Redux는 Context API를 사용하여 만든 라이브러리 중 하나이므로 전역 상태 관리에서는 큰 차이는 없다고 한다.
차이점은 Context는 단지 종속성 주입의 한 형태일 뿐이고 Redux는 전역 상태 관리 외의 다양한 기능을 제공하여 상태 관리를 더 수월하게 해준다는 것이다.
당연하게도 목적성에 따라 기준이 달라질 것이고 그 기준에 따라 선택하면 된다.
Redux와 같은 전역 상태관리 라이브러리는 많은 기능을 제공하지만 보일러 플레이트가 많고 러닝커브가 높다.
오직 전역 상태 관리만을 사용한다면 Context API를 사용하는 것이 좋고 그 외의 필요한 기능이 있다면 Redux를 선택해 사용하는 것이 좋다.
또한 Context API와 전역 상태 관리 라이브러리를 같이 사용하는 경우도 봤는데 어떤 상황에서 사용하는 것인지 다음에 알아봐야겠다.