inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

11.3) Context 분리하기

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

해결된 질문

180

이지

작성한 질문수 1

0

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

image.png

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


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


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

javascript react node.js

답변 2

2

효빈 Hyobin

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

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 인턴

안녕하세요, 인프런 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 강의 질문”: 상태와 액션의 분리에 따른 성능 최적화 전략을 논의합니다.

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

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

useEffect와 lifecycle문의

0

28

2

프론트엔드 학습 수준 문의

0

39

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

48

2

데이터 로딩중 화면만 계속 나와요!!

0

55

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

79

2

이후의 커리큘럼 문의

0

102

2

실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.

0

50

2

최적화 관련 질문있습니다 (useMemo 등)

0

84

3

프로바이더 컴포넌트의 위치는 어떤 기준인가요?

1

82

3

Date 객체에 관련하여 질문드립니다.

0

85

2

리액트 개정판 교재 질문

0

60

2

예제코드가 안나와요!

0

78

2

select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com

0

108

2

onMouseEnter 관련 문의 드립니다

0

92

3

배열의 렌더링 관련 질문 드립니다.

0

73

2

2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.

0

113

2

TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?

0

137

2

useCallback 적용한 onCreate, onUpdate, onDelete 함수..

0

70

1

vs code 자동완성관련 문의

0

113

2

91강 useEffect내에서 상태변화함수 호출시 발생하는 에러

1

179

2

87강 필터 함수 질문

0

69

2

useRef, useState count 비교

0

67

2

안된다고했던 이유가 무엇이었는지 모르겠습니다

0

90

2

85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.

0

75

2