동일한 Counter 컴포넌트를 기반으로 설명 + 각 패턴의 장단점
제어의 역전(Inversion of Control)
컴포넌트 사용자에게 얼마만큼의 유연성과 제어권이 주어지는가
하나의 거대한 부모 컴포넌트에 모든 props를 집어넣고 하위 UI 컴포넌트로 향해 내려가는 대신, 각 prop를 가장 적합한 SubComponent에 연결
컴포넌트의 UI가 매우 뛰어난 유연성을 가지고 있음
하나의 컴포넌트로부터 다양한 케이스 생성 가능
대부분의 로직은 기본 Counter 컴포넌트에 포함하고 React.Context는 모든 자식 컴포넌트의 states와 handlers를 공유하는 데 사용 => 책임 소재를 명확히 분리
유연성이 높다 = 예기치 않은 동작을 유발할 가능성이 크다
사용자가 컴포넌트를 어떻게 사용하기를 원하는지에 따라, 유연성을 어느 정도 제한하고 싶을 수도 있음
이 패턴 사용 시 JSX 행 수 증가
특히 EsLint와 같은 린터나 Prettier와 같은 코드 포맷터를 사용하는 경우 더욱 심각해짐
단일 컴포넌트 수준에서는 큰 문제가 아니지만, 규모가 커질수록 그 차이가 확연
훅과 JSX 컴포넌트 사이에 사용자 커스텀 로직을 삽입하여 기본 컴포넌트의 동작 변경 가능
2022년 필수 리액트 패턴 5가지 – ① Compound Component, Control Props, Custom Hook