강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

lny1203님의 프로필 이미지
lny1203

작성한 질문수

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

11.3) Context 분리하기

Context 분리하기 강의 내용 중에 궁금한 것이 있습니다!

해결된 질문

작성

·

127

·

수정됨

0

Context 분리하기 강의 중 3분 55초에 나오는 컴포넌트의 계층 구조 표를 보면,

image.png

기존의 Context를 TodoStateContext와 TodoDispatchContext로 분리하면서 TodoDispatchContext가 TodoStateContext의 하위에 존재하는 것을 봤는데요,


이 부분에서 의문이 생긴 것이 TodoStateContext와 TodoDispatchContext가 형제 위치에 존재하면 안되는걸까요..?


제 생각에는 TodoDispatchContext가 하위에 존재하지 않고 StateContext와 형제 위치에 있다면 DispatchContext가 todos에 영향을 받지 않아 리랜더링도 발생하지 않을 것 같은데,
해당 방법이 안되는 이유가 있을까요?

답변 2

2

안녕하세요 🙂 정환님이 휴가를 가셔서, 제가 대신 답변드립니다!!

React에서 'StateContext.Provider'와 'DispatchContext.Provider'가 무조건 부모-자식 관계일 필요는 없습니다. 일반적으로는 StateContext.Provider가 바깥에, 그리고 그 안에 DispatchContext.Provider를 중첩해서 사용하는데요, 형제 위치에 배치하고 싶다면 다음과 같이 작성해보시면 될 것 같습니다!

<StateContext.Provider value={state}>
  <ComponentUsingState />
</StateContext.Provider>

<DispatchContext.Provider value={dispatch}>
  <ComponentUsingDispatch />
</DispatchContext.Provider>

다만, 위와 같이 작성하게 되면 ComponentUsingState 컴포넌트는 DispatchContextProvider에 접근할 수 없고, ComponentUsingDispatch 컴포넌트는 StateContextProvider에 접근할 수 없다는 단점이 있으니, 프로젝트에 알맞게 작성해주시면 될 것 같습니다 🙂

1

안녕하세요, 인프런 AI 인턴입니다. lny1203님!

질문에서 언급하신 Context API를 이용한 상태 및 액션 분리와 관련된 사항은, 주로 컴포넌트 재렌더링과 성능 최적화를 고려할 때 발생합니다. 아래에서 자세히 설명드리겠습니다.

Context API에서 상태(State)와 디스패치(Dispatch) 분리

React에서 Context API를 활용하여 상태 관리 및 디스패치를 다룰 때, 상태와 디스패치를 분리하는 일반적인 이유는 다음과 같습니다:

  1. 최적화: 상태와 디스패치를 동일한 Context에 포함시키면, 상태가 변경될 때마다 모든 구독된 컴포넌트가 리렌더링됩니다. 이를 분리하면, 상태가 변경될 경우 상태에 연결된 컴포넌트만 리렌더링되고, 디스패치 액션은 영향을 받지 않게 할 수 있습니다.

  2. 구조적 설계: 상태와 디스패치를 서로 다른 목적에 맞게 관리할 수 있으며, 더 명확한 역할 분리를 통해 코드 유지보수가 용이해집니다.

  3. 리렌더링 제어: 디스패치 Context는 주로 함수를 제공하기 때문에, 상태 변경에 따른 불필요한 리렌더링을 줄일 수 있습니다.

TodoStateContext와 TodoDispatchContext의 구성

당신이 언급하신 대로, TodoStateContextTodoDispatchContext가 형제 관계로 존재한다면, 기술적으로는 문제 없습니다. 그러나 Context의 배치와 관련된 최적화 문제를 해결하려면 다음을 고려해야 합니다:

  • Provider의 위치: Context Provider의 위치는 해당 Context를 어느 컴포넌트들이 사용하는가에 따라 달라질 수 있습니다. App 계층 구조에서 형제로 나란히 존재하더라도, 이를 사용하는 컴포넌트들이 서로 Context의 데이터 혹은 함수를 효율적으로 활용할 수 있으면 됩니다.

다시 말해 TodoDispatchContextTodoStateContext에 영향을 받지 않는 구조라면, 형제 관계에서도 문제없이 작동할 수 있습니다. 그러나 사용 방식에 따라 다르므로, 아래 참고자료들을 활용하여 좀 더 심도 있게 분석해보시는 것이 좋습니다:

유사한 질문들

  1. “data와 onCreate, onRemove, onEdit 을 같은 context에서 전달하면 안되는 이유”: Context의 효율적 분리를 통한 데이터 및 액션 전달의 최적화에 대한 논의입니다.
  2. “일기 관리 기능 구현하기2 강의 질문”: 상태와 액션의 분리에 따른 성능 최적화 전략을 논의합니다.

이 설명이 도움이 되길 바라며, 추가적인 질문이 있으시면 언제든지 말씀해 주세요. 곧 지식공유자께서 더욱 상세한 답변을 제공해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lny1203님의 프로필 이미지
lny1203

작성한 질문수

질문하기