[React] ModalPortal
ModalPortal
ModalPortal์ด๋?
ModalPortal
์ React์์ ๋ชจ๋ฌ์ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๊ธฐ ์ํ ๊ธฐ์
React๋ ์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ค์ ์ํ ๊ตฌ์กฐ๋ก ์ค์ฒฉํ์ฌ ๋ ๋๋งํ๋ค. ๋ชจ๋ฌ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ค๊ฐ์ ๋ ๋๋ง๋์ด์ผ ํ๋ฉฐ, ์ผ๋ฐ์ ์ธ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ฃ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ฌ์ด ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋๋๋ฐ, ๋ชจ๋ฌ์ ์ปดํฌ๋ํธ๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๊น์ํ ๊ณณ์ ์๋ค๋ฉด ๋ชจ๋ฌ์ ์ ๋ฐ์ดํธ๊ฐ ์์์น ๋ชปํ ๋ถ์์ฉ์ ์ผ์ผํฌ ์ ์๋ค.
ModalPortal
์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฐ๋ `ModalPortal`์ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ๋ณ๋์ DOM ๋ ์ด์ด์ ๋ ๋๋งํ๋๋ก ๋์์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ฌ์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๊ฒ ๋ฉ๋๋ค. ReactDOM.createPortal() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ๋ณ๋์ DOM ๋ ธ๋์ ๋ ๋๋งํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์์ ModalPortal์ ์ฌ์ฉํ ์ด์
์ ํ๋ฉด์์ ์ ํ ๋ฆฌ์คํธ ํ์ด์ง์์ ์ ํ์ ํด๋ฆญํ๋ฉด ์ ํ ์์ธํ์ด์ง ๋ชจ๋ฌ์ด ๋ํ๋๊ฒ ๋๋๋ฐ ์ด๋ ๋ชจ๋ฌ ์ฐฝ์ ์์น๊ฐ ์ํ๋ ์์น์ ๊ณ ์ ๋๊ฒ ๋ํ๋์ง ์์
ModalPortal
์ ์ฌ์ฉํ์๋ค.
import ReactDOM from 'react-dom';
function ModalPortal({ children }: { children: React.ReactNode }) {
const modalRoot = document.getElementById('modal-root')!;
return ReactDOM.createPortal(children, modalRoot);
}
export default ModalPortal;
ReactDOM ์ํฌํธ:
- ReactDOM์ React์ Portal ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ํฌํธ
ModalPortal ํจ์ ์ปดํฌ๋ํธ:
-
ModalPortal ์ปดํฌ๋ํธ๋ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ์ต์์ ๋ ๋ฒจ์ ๋ ๋๋งํ๊ธฐ ์ํ ์ญํ
-
children์
ModalPortal ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ
modalRoot ์์ ์ ํ:
- modalRoot๋ HTML ๋ฌธ์ ๋ด์์ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ๋ ๋๋งํ ์์น๋ฅผ ๋ํ๋ ๋๋ค.
- modal-root๋ผ๋ id๋ฅผ ๊ฐ์ง ์์๊ฐ HTML ๋ฌธ์ ๋ด์ ์๋ ๊ฒ์ ์ ์ ๋ก ์ด ์์๊ฐ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ๋ ๋๋งํ ์์น์ ๋๋ค.
ReactDOM.createPortal()
ํธ์ถ:
ReactDOM.createPortal()
ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ฌ ์ปจํ ์ธ ๋ฅผ ๋ ๋๋ง- ์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ ๋ ๋๋งํ ์ปจํ ์ธ (์์ ์ปดํฌ๋ํธ)๋ฅผ ์ ๋ฌ
- ๋ ๋ฒ์งธ ์ธ์๋ก๋ ๋ ๋๋ง ์์น๋ฅผ ๋ํ๋ด๋ DOM ๋ ธ๋๋ฅผ ์ ๋ฌ
๐ ์ ๋ฆฌ
๋ชจ๋ฌ ์ปจํ ์ธ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ฉฐ, ํด๋น ์ปดํฌ๋ํธ์ ์ํ ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ์ํฅ์ ๋ฏธ์น์ง ์๊ฒ๋๋ค. ModalPortal์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ฌ์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๊ฒฉ๋ฆฌ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ฒ ๋๋ฏ๋ก, ๋ชจ๋ฌ์ ์ ๋ฐ์ดํธ๋ ์ํ ๋ณํ๊ฐ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ฌ์ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ