context는 React 컴포넌트 트리 안에서 전역적으로 데이터를 공유할 수 있도록 고안된 방법

트리 구조가 복잡해질 수록 하위 컴포넌트로 props를 전달하기 위해 drilling이 발생할 수 있게 되고 그러면 유지보수가 힘듬

<aside> 💡 props drilling → 애플리케이션에서 데이터를 전달하기 위해 필요한 과정을 설명하는 용어

</aside>

단, context를 사용하면 컴포넌트를 재사용하기 어려워지기 때문에 꼭 필요할 때만 사용해야함

const DarkModeContext = createContext(null);

function App() {
    const [isDark, setIsDark] = useState(false);

    return (
        <DarkModeContext.Provider value={{isDark, setIsDark}}>
            <Header/>
            <Content/>
            <Footer/>
        </DarkModeContext.Provider>
    );
}

Provider는 value prop을 이용하여 하위 컴포넌트에게 값을 전달한다.

이 때 값을 전달받을 수 있는 컴포넌트 수에는 제한이 없다

해당 Provider는 Context 이름으로부터 useContext hooks를 활용하여 어느 컴포넌트든 필요한 순간 가져다 쓸 수 있다. → 전역변수 개념

function Header() {
    const context = useContext(DarkModeContext);  // 전역으로 context 사용
    const {isDark} = context;

    return (
        <header
            className="header"
            style={
                {
                    backgroundColor: isDark? 'black': 'lightgray',
                    color: isDark? 'white': 'black'
                }
            }
        >
            <h1>Welcome to Greedy World!</h1>
        </header>
    );
}