-
교보문고 공통 컴포넌트 + ToastMessage 만들기!카테고리 없음 2025. 4. 13. 21:01
아래는 실제 교보문고 모달과 ToastMessge다.




공통 컴포넌트를 만들기 전에는, 로그인 후 이용할 수 있다는 모달 컴포넌트만 만들었었다.
처음에 만들었던 모달 컴포넌트는 위의 이미지처럼 로그인 후 이용할 수 있다는 모달이였는데, 장바구니 버튼을 눌렀을 때도 모달이 나온다는걸 알고 장바구니 모달도 만들려고 했었다.
이런 식으로 진행을 하면, 시간이 오래 걸리고 힘들 것 같다는 생각에 교보문고 홈페이지에 들어가서 어떤 버튼을 누를 때 어떤 모달이 나오는지 확인을 하고, 공통 컴포넌트를 만들어야겠다는 생각을 했다.
` //src/app/components/modalsGenericModal.tsx import styles from "./Generic.module.css" type ModalProps = { title: string; // 1줄 텍 description?: string; // 2줄 텍 confirmText?: string; // 확인 버튼 cancelText?: string; // 취소 버튼 onClose: () => void; // 닫기/취소 동작 onConfirm?: () => void; // 확인 } export default function GenericModal({ title, description, confirmText = '확인', cancelText = '취소', onConfirm, onClose }: ModalProps) { return ( <div className={styles.modal_overlay}> <div className={styles.modal_box}> <div></div> <div className={`${styles.dialog_wrap} ${styles.dialog_content} ${styles.dialog_content} ${styles.pd} ${styles.por}`}> <div className={`${styles.dialog_contents} ${styles.contents_move}`}> <span className={`${styles.text}`}>{title}</span> <span className={`${styles.text_sm}`}>{description}</span> </div> <div className={`${styles.dialog_footer}`}> <button type="button" onClick={onClose} className={`${styles.btn_md} ${styles.btn_common} ${styles.btn_class} ${styles.btn_gray}`}> <span className={styles.text_class}>{cancelText}</span> </button> <button type="button" onClick={onConfirm} className={`${styles.btn_md} ${styles.btn_common} ${styles.btn_class} ${styles.ml_6} ${styles.btn_primary}`}> <span className={styles.text_class}>{confirmText}</span> </button> </div> </div> </div> </div> ) } `
상세 페이지에서 공통 컴포넌트 사용한 조건부 렌더링 ToastMessage 컴포넌트
교보문고 홈페이지에서 로그인 후, 찜 버튼을 누르면 보라색으로 토스트 메시지가 나오는데, 다른 버튼에서도 사용이 될 수 있을 것같아서 혹시 몰라 미리 공통 컴포넌트로 만들었다.


Toast Message 참고 블로그