TIL

TIL-23.06.05

너구리개발자 2023. 6. 6. 03:41

 

 

문제점

팝업 모달창 기능구현을 위해 그동안 해왔던 root div 한 곳에 렌더링 해오던 방식에 대해 수정할 필요성을 느낌

진정한 의미의 모달 기능구현은 다른 root div에서 모달이 팝업되어 기존에 렌더링되어 있는 컴포넌트를 덮는것

 

 

 

시도한점

모달을 렌더링 해주기 위한 또 다른 루트 div <div id='modal-root'></div>을 index.html body에 작성해주고,

modal-root div에 모달컴포넌트를 전송해주기위해 createPortal 기능을 활용

재사용을 위해 Portal을 만들어주는 컴포넌트를 작성

const ModalPortal = ({ children }) => {
  const modalRoot = document.getElementById('modal-root');
  return createPortal(children, modalRoot);
};

해당 컴포넌트의 자식요소로 모달컴포넌트가 들어오면 이걸 포탈을 이용해 modal-root div에 전송해 렌더링 시켜준다.

  <ModalPortal>
     <CommentDelModal onAccess={handleDelCheck} />
  </ModalPortal>

이런식으로 모달창을 렌더링할 해당 컴포넌트의 return부분에서 재사용가능하게끔 작성해놓은 ModalPortal컴포넌트의 자식요소로 모달컴포넌트를 넣어주면된다.

결과적으로 기존의 컴포넌트들은 root div에 담겨지고, 포탈을 이용한 모달컴포넌트들은 modal-root div라는 곳에 따로 담겨져

각각 따로 관리할수있게된다. 또한 렌더링된 기존의 컴포넌트 위를 가리며 렌더링되는 모달창의 개념도 이렇게 따로 렌더링되는것이 더 정확하다고 생각된다.

 

 

 

 

알게된점

개발자분들의 블로그 글들을 읽어보다가 모달창 관리에 대한 방법을 알게되었다. index.html파일에 기존의 root div외에 또 다른 root div를 만들어 컴포넌트들을 따로 렌더링시킨다는 개념이 생소했고, 실제로 가능하다는걸 내가 직접 코드를 작성해가며 알게되었다.