[TIL] React Portal

기성·2024년 9월 11일
1

TIL

목록 보기
55/82

React Portal

React Portal은 React 컴포넌트가 현재 DOM 계층 구조의 부모 자식 관계와 무관하게, DOM트리의 위치에 자식을 렌더링할 수 있게 하는 기능이다. 기본적으로 React 컴포넌트는 부모 컴포넌트 안에 렌더링되지만, 포탈을 사용하면 컴포넌트를 DOM 트리의 원하는 곳에 삽입할 수 있다.

React Portal은 모달, 툴팁, 드롭다운 메뉴 등 특정 컴포넌트가 부모 컴포넌트의 시각적 레이아웃에 의존하지 않고, 화면의 최상위 레이어에 나타나야 할 때 주로 사용된다.

createPortal

createPortal을 사용하면 일부 자식을 DOM의 다른 부분으로 렌더링할 수 있다.

import { createPortal } from 'react-dom';

// ...

<div>
  <p>This child is placed in the parent div.</p>
  {createPortal(
    <p>This child is placed in the document body.</p>,
    document.body
  )}
</div>

Portal은 DOM노드의 물리적 배치만 변경한다. 다른 모든 방식으로, portal에 렌더링하는 JSX는 이를 렌더링하는 React 컴포넌트의 자식 노드 역할을 한다.

매개변수

  • children : JSX의 일부(예를 들어 <div /> 또는 <SomeComponent />), Fragment(<>...</>), 문자열이나 숫자 또는 이들의 배열과 같이 React로 렌더링할 수 있는 모든 것이다.

  • domNode : document.getElementById()가 반환하는 것과 같은 일부 DOM 노드. 노드가 미리 존재해야 합니다. 업데이트 중에 다른 DOM 노드를 전달하면 portal 콘텐츠가 다시 생성된다.

  • optional key: Portal의 key로 사용할 고유한 문자열 또는 숫자.

반환값
createPortal은 JSX에 포함하거나 React 컴포넌트에서 반환할 수 있는 React 노드를 반환한다. React가 렌더링 출력에서 이를 발견하면, 제공된 children을 제공된 domNode 안에 배치한다.

주의 사항
Portal의 이벤트는 DOM 트리가 아닌 React 트리에 따라 전파된다. 예를 들어, portal 내부를 클릭했을 때 포털이 <div onClick>으로 감싸져 있으면 해당 onClick 핸들러가 실행된다. 이로 인해 문제가 발생하면 portal 내부에서 이벤트 전파를 중지하거나 portal 자체를 React 트리에서 위로 이동해야한다.

profile
프론트가 하고싶어요

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN