React.Portals

React.Portals

카테고리
React
날짜
2024년 06월 12일
작성자
JeongjungsikJeongjungsik
태그

React.Portals?

Portals는 DOM 트리의 다른 위치에 렌더링해야 하는 컴포넌트를 효율적으로 관리할 수 있게 해준다.
 

주요 사용처

주로 사용처는 다음과 같다.
  • 모달 창 및 파업 창
  • 툴팁 및 드랍다운
  • 컨텍스트 메뉴
  • 전역 알림 및 메시지
 

그래서 왜 쓰는거임?

 
  • DOM 트리 외부에 렌더링: 부모 컴포넌트의 DOM 트리와는 다른 위치에 렌더링할 수 있다.
  • 스타일 충돌 방지: 부모 컴포넌트의 스타일이나 레이아웃에 영향을 받지 않는다.
  • UI 요소의 위치 지정: 모달, 팝업, 툴팁, 드롭다운, 컨텍스트 메뉴, 전역 알림 등의 요소를 쉽게 원하는 위치에 렌더링할 수 있다.
 
즉! React Portals를 사용하면 복잡한 UI 구조를 더 깔끔하고 관리하기 쉽게 구현할 수 있다.
 

대표적인 예시 - 모달창

ReactDom.createPortal(child, container)
  • ReactDom의 createPortal 메서드를 이용해서 원하는 컴포넌트를 Portal 시킬 수 있다.
  • 첫 번째 인자는 엘리먼트, 문자열, 혹은 fragment같은 어떤 종류이든 렌더링 할 수 있는 React의 자식이 들어간다.
  • 두 번째 인자는 DOM element가 들어간다. 이 두번째 인자에 아래에 index.html 에서 작성한 div 요소가 들어간다.

적용

  • index.html에 다음을 삽입
<div id="root"></div> // root div 요소 아래에 삽입해주자~ <div id="root-portal"></div>
 
  • Modal
import { createPortal } from 'react-dom' const Modal = () => { const $portal_root = document.getElementById('root-portal') return ( <div> createPortal(<Modal {...modalState} />, $portal_root) </div> ) } export default Modal
 

댓글

guest