본문으로 바로가기

프레젠테이셔널, 컨테이너 컴포넌트 패턴

category React 2021. 2. 13. 13:55

리액트 프로젝트에서 리덕스를 사용할 때 가장 많이 사용하는 패턴이다

view를 책임지는 Presentational Component와 동작을 책임지는 Container Component로 나누어서 재사용과 유지 보수성을 높이는데 도움을 준다

두 개의 컴포넌트들은 각각 다음과 같은 특성을 가진다

Presentational Component

  • 어떻게 보여질지를 책임진다
  • 내부에 Presentational Component와 Container Component 모두 가질 수 있다
  • 대부분 DOM 마크업과 스타일을 가지고 있다
  • 어플리케이션의 나머지 부분에 아무런 의존성을 가지지 않는다
  • 데이터를 건드리는 작업은 일체하지 않고 필요한 데이터는 props로 받아오기만 한다
  • UI상태를 관리하기 위해 state를 가질 수 있다

Container Component

  • 어떻게 동작할 지를 책임진다
  • 내부에 Presentational Component와 Container Component 모두 가질 수 있다
  • 대부분 보여주기 위한 DOM 마크업이나 스타일은 가지고 있지 않다
  • 데이터를 다른 컴포넌트에게 제공한다
  • state를 활용한 데이터 저장소로 쓰인다
  • 직접 작성되기 보다는 고차 컴포넌트에 의해 생성되는 경우가 많다

이 두 성질을 가진 컴포넌트들은 명확히 구분되어야 하기 때문에 보통 다른 디렉토리에 저장된다

장점


  • 관심사의 분리가 쉽다

    ⇒ 컴포넌트를 두 가지로 분류한 만큼 UI와 데이터의 관심사 분리가 쉽다

  • 재사용성을 높일 수 있다

    ⇒ 다른 Container Component 에서 온 데이터라 할지라도 같은 Presentational Component로 재사용하여 표현할 수 있다

언제 Container Component를 만들어야 할까?


앱을 제작할 때 Presentational Component를 먼저 작성해서 프로젝트를 진행하다가

많은 props들이 그저 아래로 전달되기 위해 컴포넌트를 거쳐가고 있다면 그때가 바로 Container Component를 추출할 때라고 일러주고 있다

'React' 카테고리의 다른 글

리덕스-미들웨어 만들기  (0) 2021.02.16
Redux 파일 구조  (0) 2021.02.15
불변성  (0) 2021.02.02
Effect Hook  (0) 2020.11.18
State Hook  (0) 2020.11.17