1. props 전달의 문제
2. Context: props 전달의 대안
3. 동일한 컴포넌트에서 Context 사용 및 제공
4. Context는 중간 컴포넌트들을 통과한다.
5. Context를 사용하기 전
6. Context 사용 사례
Step 1: Context 만들기
Step 2: context 사용하기
Step 3: context 제공하기
작성된 코드 예제를 참고하자.
작성된 코드 예제를 참고하자.
<div>
에 color: blue
을 지정할 수 있으며, 중간에 다른 DOM 노드가 color: green
으로 재정의하지 않는 한 그 안에 있는 모든 DOM 노드는 아무리 깊어도 그 색을 상속받는다.color
및 background-color
와 같은 서로 다른 속성이 서로 재정의되지 않는다.background-color
에 영향을 주지 않고 모든 <div>
의 color
를 빨간색으로 설정할 수 있다.createContext()
로 만드는 각 context는 다른 context와 완전히 분리되어 있으며, 특정 context를 사용하거나 제공하는 컴포넌트를 함께 묶는다.props를 몇 단계 깊이 전달해야 한다고 해서 해당 정보를 context에 넣어야 한다는 의미는 아니다.
다음은 context를 사용하기 전에 고려해야 할 두 가지 대안이다.
children
으로 전달하라.posts
과 같은 데이터 props를 직접 사용하지 않는 시각적 컴포넌트에 <Layout posts={posts} />
와 같은 방법 대신, Layout이 children을 prop으로 사용하도록 만들고 <Layout><Posts posts={posts} /></Layout>
를 렌더링한다.이 두 가지 접근 방식이 모두 적합하지 않은 경우 context를 고려하자.
테마
앱에서 사용자가 앱의 모양을 변경할 수 있는 경우(예: 다크 모드), 앱 상단에 context provider를 배치하고 시각적 모양을 조정해야 하는 컴포넌트에서 해당 context를 사용할 수 있다.
현재 계정
많은 컴포넌트에서 현재 로그인한 사용자를 알아야 할 수 있다.
이 정보를 context에 넣으면 트리의 어느 곳에서나 편리하게 읽을 수 있다.
또한 일부 앱에서는 여러 계정을 동시에 조작할 수 있다.
(예: 다른 사용자로 댓글을 남기는 경우)
이러한 경우 UI의 일부를 다른 현재 계정 값으로 중첩된 provider로 감싸는 것이 편리할 수 있습니다.
라우팅
대부분의 라우팅 솔루션은 내부적으로 context를 사용하여 현재 경로를 유지한다.
이것이 모든 링크가 활성 상태인지 아닌지를 “아는” 방식이다.
자체 라우터를 구축하는 경우에도 이러한 방식을 사용할 수 있다.
state 관리
앱이 성장함에 따라 앱 상단에 많은 state가 가까워질 수 있다.
아래에 있는 많은 멀리 떨어진 컴포넌트에서 이를 변경하고 싶을 수 있다.
context와 함께 reducer를 사용하여 복잡한 state를 관리하고 번거로움 없이 멀리 떨어진 컴포넌트에 전달하는 것이 일반적이다.
export const MyContext = createContext(defaultValue)
를 사용하여 context를 생성하고 내보냅니다.useContext(MyContext)
훅에 전달하여 깊이에 상관없이 모든 하위 컴포넌트에서 읽을 수 있도록 합니다.<MyContext.Provider value={...}>
로 감싸서 부모로부터 제공받습니다.children
으로 전달해 보세요.https://developer.mozilla.org/ko/