React Portal을 활용한 간단한 모달

Taek·2020년 6월 14일
0

1. root와 같은 레벨의 요소 추가

<!-- index.html -->

<!DOCTYPE html>
<html lang="ko">
  
...
  
<body>
    <div id="root"></div>
    <div id="modal"></div>
</body>

</html>

2. ModalPortal 컴포넌트 추가

// ModalPortal.jsx

import ReactDOM from 'react-dom';

const ModalPortal = ({ children }) => {
    const el = document.getElementById('modal');
    return ReactDOM.createPortal(children, el);
};

export default ModalPortal;

3. Modal 컴포넌트 추가
이 방식은 해당 컴포넌트에 대한 상위 컴포넌트가 필요하다. 상위 컴포넌트에서 모달 노출 여부에 대한 상태값을 두고 조건부 렌더링한다.

// Modal.jsx

import ModalPortal from 'utils/ModalPortal';

const Modal = () => {
  return (
    <ModalPortal>
       // <div id="modal"></div> 요소에 추가 될 부분
       Modal Contents
       ...
    </ModalPortal>
  ); 
}

0개의 댓글