회원가입 성공 모달을 구현하면서 Props Drilling 이슈를 마주쳤고, 이를 해결하는 과정을 공유하고자 합니다.
Props Drilling을 피하고 더 효율적인 상태 관리 방법을 알아보겠습니다.
Props Drilling은 상위 컴포넌트에서 하위 컴포넌트로 props를 전달할 때, 중간에 있는 여러 컴포넌트들을 거쳐가야 하는 상황을 말합니다.
// 최상위 컴포넌트
const SignupScreen = () => {
const handleModalClose = () => {
// 모달 닫기 로직
};
return (
<SignupStep2 onModalClose={handleModalClose} />
);
};
// 중간 컴포넌트
const SignupStep2 = ({ onModalClose }) => {
return (
<LoginSuccessModal onClose={onModalClose} />
);
};
// 최하위 컴포넌트
const LoginSuccessModal = ({ onClose }) => {
return (
<Modal onClose={onClose} />
);
};
상태를 최상위 컴포넌트로 끌어올리고, 모달을 직접 렌더링하는 방식으로 변경했습니다.
const SignupScreen = () => {
const [showSuccessModal, setShowSuccessModal] = useState(false);
const handleModalClose = () => {
setShowSuccessModal(false);
// 네비게이션 로직
};
return (
<SafeAreaView>
<SignupStep2 /* 필요한 props만 전달 */ />
<LoginSuccessModal
visible={showSuccessModal}
onClose={handleModalClose}
/>
</SafeAreaView>
);
};
상태 관리 중앙화
Props Drilling 제거
컴포넌트 재사용성 향상
유지보수성 향상
Context API 사용
컴포넌트 분리
Props Drilling을 피하고 상태를 적절한 위치로 끌어올림으로써, 더 깔끔하고 유지보수하기 좋은 코드를 작성할 수 있습니다. 이는 React/React Native 개발에서 자주 마주치는 문제이며, 이러한 패턴을 이해하고 적용하는 것이 중요합니다.
앞으로도 비슷한 상황이 발생한다면, 먼저 상태가 어디에서 관리되어야 하는지 고민하고, Props Drilling을 최소화하는 방향으로 설계하는 것이 좋겠습니다.