우테코 크루인 갓찌, 찌구리, 준찌
의 추천 영상인 원지혁님의 발표를 보고 정리했어요. 컴포넌트 다시 생각하기
리액트 컴포넌트를 만들려면 뭐가 필요하죠?
👇 페이스북이 만든 GraphQL 클라이언트 중 하나인 Relay 문서 중 이런 이야기가 있어요.
대다수의 제품은 하나의 특정 동작을 원합니다.
로딩 인디케이터를 표시하면서 필요한 모든 데이터를 가져온 다음,
데이터를 사용할 수 있게 되면 전체 뷰를 렌더링합니다.
딸기는 당연히 필요하구요!
딸기를 케이크에 얹기 위해 생크림이 필요하죠.
👉 딸기 케이크의 숨은 의존성 : 생크림
💭 그럼 어떻게 의존성을 관리해야할까요?
1) 비슷한 관심사라면 가까운 곳에 둡시다.
2) 하나의 컴포넌트가 너무 커진다?
3) 리모트 데이터 스키마 → 루트 컴포넌트 → 중간의 여러 컴포넌트 → 현재 컴포넌트 props를 사용하면 강한 의존성
이 생기죠.
😀 모델명과 id만으로 데이터 접근합시다.
⚠️ Global Object Identification
의존한다면 그대로 드러내자!
변경할 때 편리해요. 즉, 유지보수 그것이 전부입니다.
리모트 데이터 스키마
입니다.👇 예를 들어 이 변경에 어떻게 대응할까요?
🔨 요구사항: User는 만들어져 있어요. 자, 이제 Page를 만들어보세요!
User와 Page가 거의 비슷하게 생겼네요.
첫번째 방법
User 컴포넌트 재사용
을 생각해볼 수 있겠죠.
거의 비슷하게 생겼으니 재사용해도 되겠네~ 라고 생각할 수 있어요.
하지만 의존성이 다르네요. (User data와 Page data의 생김새는 엄연히 다르죠)
😭 함께 변하면 안되는 것들이 특정 컴포넌트에 의존성으로 함께 존재하면서 발생하는 이슈가 있을 수 있어요.
🤔 흠... 그러면 함께 변해야 하는 것들과 따로 변해야하는 것들을 어케 구별해야 하나요?
두번째 방법
모델 기준 컴포넌트 분리합시다.
끊임없이 변하면서도 유저에게 일관된 경험을 제공해야합니다.
같은 모델을 의존하는 컴포넌트: 재사용
다른 모델을 의존하는 컴포넌트: 분리
👇 그럼 이제 생각해봅시다.
리모트 데이터 스키마의 의존성
을 주의깊게 살펴봅시다.
이 기준으로 컴포넌트를 재사용할지 분리할지 나눌 수 있을 거예요.
❓ 중고거래와 비즈소식이 비슷하게 생겼다고 컴포넌트를 재사용하실껀가요?
컴포넌트는 다음과 같이 만듭시다.
1. 비슷한 관심사라면 가까운 곳에 두기
2. 데이터를 ID기반으로 정리하기
3. 의존한다면 그대로 드러내기
4. 모델 기준으로 컴포넌트 분리하기
질문이 정답보다 중요합니다.
기술보다 관점이 중요합니다.