리액트 모달 팝업

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
리액트 모달 팝업

QA

리액트 모달 팝업

본문

리액트 독학 하다보니 계속 막히네요..

 

구글링 통해서 모달 팝업 열고 닫는 기본적인 소스 대입을 해보고 조금 이해는 했는데

의문점은 현재 여는 버튼 하고 모달하고 같은 페이지 즉 테스트중인 app.jsx 안에서만 되고 있어서..

제가 구현 하고 싶은건 여러개의 모달은 modal.jsx 에 모아놓으면 되는건 알겠는데

모달 여는 버튼은 어디에 어느 서브페이지에 있을지 모르는데 거기서 클릭했을 때 modal.jsx 를 타고 가서

해당 모달을 열어야 될거 같은데 다른 페이지에서 여는 버튼을 동작시키니 작동을 안해서

먼가 또 부가적인 작업이 필요한거 같은데 설명 조금 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2

언급하신데로 같은 페이지 내에서는 유지 이펙트로 버튼 제어 하면 그렇게 어렵지 않게 구현이 가능할 것입니다.

 

이제 다른 컴포넌트를 통해 이를 구현하려면 props 에 대한 이해가 필요합니다.

어려운 용어를 쉽게 풀이하면 부모가 가진 데이터를 자식에게 공유 해주는 것입니다.

 

질문 기준으로, 모달창을 열지 말지의 기준을 자식 컴포넌트 (모달)에게 넘겨주는 것이라 보시면 됩니다.

아래 코드 잠시 볼까요 ?

 


function App() {
  const [isOpen, setIsOpen] = useState(false);
 
 
const handleModal = () => {
    setIsOpen(!isOpen);
  };
 
  return (
    <>
      <button onClick={handleModal}>Open Modal</button>
      <Modal isOpen={isOpen} onClose={handleModal}>
        <h1>Modal Title</h1>
        <p>Modal Content</p>
      </Modal>
    </>
  );
}

 

코드 보시면 눈여겨 보셔야 하는게 <Modal isOpen={isOpen} onClose={handleModal}> 이부분입니다.

퍼블리셔니깐 이해쉽게 html 태그에 속성을 추가 해준다?라는 느낌으로 접근하면 됩니다.

작명=값 형태로 이루어져 있습니다. 

is는 보통 상태 작명을 하는 경우가 많아 구글 검색 결과에서도  isOpen 혹은 isModal 이라고 많이 쓸꺼에요

 

이렇게 되면 모달 컴포넌트 자체에서 이제 isOpen 과 onClose 를 사용할 수 있습니다.

물론 children 컨텐츠두요

 

다음 코드 볼까요?


const Modal = (props) => {
if (!props.isOpen) return null;
 
return (
    <ModalOverlay onClick={props.onClose}>
    <ModalContent onClick={(e) => e.stopPropagation()}>
        {props.children}
    </ModalContent>
    </ModalOverlay>
);
    };

이렇게 props라는 인자 값으로 사용 가능합니다.

props.isOpen / props.onClose 를 사용할 수 있게 됩니다. 

그럼 modal 컴포넌트 에서 액션은 다시 부모 컴포넌트에 전해져 동작하는 원리라 보시면 됩니다.

 

스크립트에 조금 익숙해지시면 구조 분해 할당이란 것도 배우게 되는데 그땐 좀 더 쉽게 접근이 가능합니다.


const Modal = ({ isOpen, onClose, children }) => {
  if (!isOpen) return null;
 
  return (
    <ModalOverlay onClick={onClose}>
      <ModalContent onClick={(e) => e.stopPropagation()}>
        {children}
      </ModalContent>
    </ModalOverlay>
  );
};

 

props를 받아올 때 구조 분해를 해버려서 그냥 일반 변수 처럼 {isOpen} 으로 사용 가능합니다.

props를 좀 더 이해하시면, 상태 관리에 대해서 접근이 쉬운데요

전역 상태 관리인 리덕스/툴킷도 props에 대한 이해가 있을 때 배우시는게 좋습니다.

너무 의존하지 마시라는 의미이기도 하구요

 

실제 대기업 프로젝트 때 전역 상태 관리 프로그램 사용 금지여서 props 천국이였던 하하하

 

쨋든 props 천국을 약간 빗대어 만든 쇼츠가 있어 소개 합니다.

 

https://youtube.com/shorts/u86KSUc9Ngg?si=cqyP1R7CZCHCCFSN

 

화이팅 하세요^0^)/.

 

 

아이고 구글링에선 이해가 잘안됐는데 풀어서 설명해주시니 이해가 팍팍 되네요!

감사합니다. 이제 모달 응용 연습 좀 해봐야겠습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 32
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT