// React와 ReactDOM 라이브러리에서 필요한 함수들을 가져옵니다.
import { useEffect, useRef } from "react";
import { createPortal } from "react-dom";
// Modal이라는 컴포넌트를 정의합니다.
export default function Modal({ children, open, className = "" }) {
// useRef를 사용하여 dialog 요소에 대한 참조를 생성합니다.
const dialog = useRef();
// useEffect를 사용하여 open prop이 변경될 때마다 다이얼로그의 상태를 업데이트합니다.
useEffect(() => {
if (open) {
// open이 true일 경우, dialog를 보여줍니다.
dialog.current.showModal();
}
}, [open]);
// createPortal을 사용하여 children을 'modal'이라는 id를 가진 DOM 요소 안에 렌더링합니다.
return createPortal(
// dialog 요소를 생성하고, useRef로 생성한 dialog에 참조를 연결합니다.
// className prop을 통해 클래스 이름을 동적으로 할당합니다.
<dialog ref={dialog} className={`modal ${className}`}>
{children} // children prop을 통해 전달된 자식 요소들을 렌더링합니다.
</dialog>,
document.getElementById("modal") // 모달이 렌더링 될 DOM 요소를 지정합니다.
);
}
이 코드는 React와 ReactDOM의 기능을 활용하여 모달 컴포넌트를 만드는 방법을 보여줍니다.
useEffect와 useRef를 사용하여 모달의 상태를 관리하고, createPortal을 사용하여 모달을 DOM의 특정 위치에 렌더링합니다.
이 모달 컴포넌트는 children, open, className 세 가지 props를 받아 사용합니다. children은 모달 내부에 렌더링 될 내용, open은 모달의 보이고/안 보이고 상태, className은 모달에 적용될 CSS 클래스 이름입니다.
이 컴포넌트를 사용하면 필요에 따라 쉽게 모달을 생성하고 관리할 수 있습니다.














댓글 ( 0)
댓글 남기기