Replies: 5 comments 1 reply
-
|
아니 왜 이제 보여주셨죠 우선 저의 소견을 살짝 말씀드리자면,,, const modal = (title: string, message: string, isShow: boolean, onDone?: () => void, onCancel?: () => void) => {
setTitle(title);
setMessage(message);
setShowModal(isShow);
setHandleDone(() => onDone);
setHandleCancel(() => onCancel);
};Parameter가 2-3개 이상으로 넘어가게 된다면 순서에 맞게 Parameter를 넘겨야만 하는 셀프 가두리 양식이 생깁니다 😅 type ModalOptions = {
title: string;
message: string;
isShow: boolean;
onDone?: () => void;
onCancel?: () => void;
};
const modal = ({
title,
message,
isShow,
onDone,
onCancel
}: ModalOptions) => {
setTitle(title);
setMessage(message);
setShowModal(isShow);
setHandleDone(() => onDone);
setHandleCancel(() => onCancel);
};// 사용
modal({
title: "알림",
message: "작업이 완료되었습니다.",
isShow: true
});이런식으로 바꾸면 좋아보입니다! |
Beta Was this translation helpful? Give feedback.
-
|
추천 ) react Potal 이라고, 모달처럼 독립된 DOM 요소를 만들 때 쓰는 것이 있습니다. (링크 참조)
프론트엔드 시작하신지 얼마 안되었는데 이 정도 경지에 오르시다니... 대단하십니다! // useModal 정의
export const useModal = () => {
const [modalData, setModalData] = useRecoilState(DefaultModalStore);
const reset = useResetRecoilState(DefaultModalStore);
const closeModal = useCallback(
(onClick?: () => void) =>
setModalData((prev) => {
return {
...prev,
show: false,
onClick,
};
}),
[setModalData],
);
const showModal = useCallback(
({ icon, content, content2, modalId, onClick }: ShowModalType) => {
setModalData({
icon: icon,
show: true,
content: content,
content2: content2,
modalId: modalId,
onClick: () => {
onClick && onClick();
reset();
},
});
},
[setModalData],
);
return {
modalData,
setModalData,
closeModal,
showModal,
};
};// 실제 사용법
useEffect(() => {
if (candidateError) {
showModal({
content: currentPageMessages[getErrorContent(candidateError)],
modalId: 'CANDIDATE_ERROR',
onClick: async () => {
await logoutClick();
},
});
}
}, [candidateError]); |
Beta Was this translation helpful? Give feedback.
-
|
확인/취소 버튼 구성이 있는 모달은 Confirm으로 네이밍을 많이 하는 것 같아요. 유민님이 보여주신 예가 응시 쪽 모달에서도 쓰이는 모달인데요. 두분께서 구조에 관한 이야기를 하셨으니, 저는 좀 지엽적으로 가보자면,
이와 비슷하게 |
Beta Was this translation helpful? Give feedback.
-
|
앞에 분들의 매우 좋은 의견을 주셨네요!! 저도 지엽적으로 들어간면 onHide={handleCancel ? handleCancel : handleDone}요 부분을 따로 변수로 꺼낸다면 명확하게 사용이 가능하고 유지 보수에 있어 좋다고 생각합니다! 근데 역시 짬이 있으니까 코드가 매우 깔끔하네유,.., |
Beta Was this translation helpful? Give feedback.
-
|
리액트를 처음 사용해보시는 것인데도 합성 컴포넌트로 엄청 깔끔하게 작성하셨군요.. 대박 👍👍 저는 모달을 관리하는 데 있어서 중요 포인트는 2가지라는 생각이 들었는데요..!
먼저 상태를 어떻게 관리해야할 지가 고민이 되는데, Chakra UI에서는 useDisclosure 라는 훅으로 오버레이의 열고 닫힘과 관련된 로직을 추상화하여 관리하더라구요..! 혹은 toss/slash 라이브러리 중 useOverlay나 최근 업데이트 된 overlay-kit 에서는 오버레이 요소에 대한 상태를 내부적으로 핸들링해줌으로써 사용하는 개발자는 표현해야 하는 UI에만 집중할 수 있도록 제공하고 있더라구요! 아직 깊게 파보지 못한 부분이어서, 요런 것들도 알아가고 싶다는 생각이 들어요 😊 References |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
제가 타입스크립트도,, 리액트도 처음 써보는데 처음 만든 훅 구경해보세요 🙀
부트스트랩 모달으로 커스텀모달 컴포넌트를 만들고 useModal 을 만들어보았습니다
CustomModal.tsx
handleCancel이 없으면[확인] 버튼만 있는 모달이고
handleCancel이 있으면[취소] [확인] 버튼이 있는 모달입니다.
useModal.tsx
사용할때는 따로
handleModalDone를 만든후아래와 같이 사용했습니다
🐥 좋은 리팩토링 의견 부탁드립니다
Beta Was this translation helpful? Give feedback.
All reactions