๐ย Reference
๐ย Chapter
ReactDOM.createPortal(child, container) API๋ฅผ ์ฌ์ฉํด์ ๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ ๊ทธ๋๋ก ์ ์งํ๋, DOM ๊ณ์ธต ์ ๋ค๋ฅธ ์์น์ ์์์ ๋ ๋๋ง ํ๋ค.import ReactDOM from 'react-dom';
function Modal({ children }) {
return ReactDOM.createPortal(
children,
document.getElementById('modal-root') // ์ธ๋ถ DOM ๋
ธ๋
);
}
#modal-root (๋ณดํต body ํ๋จ์ ์๋ div) ๋ฐ์ ๋ ๋๋ง๋๋ค.| ํน์ง | ์ค๋ช |
|---|---|
| ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ์ ์ง | React ์ด๋ฒคํธ ์์คํ ์์์๋ ๋ถ๋ชจ๋ก ๋ฒ๋ธ๋ง๋จ (๋ ผ๋ฆฌ์ ํธ๋ฆฌ ์ ์ง) |
| ๋ ์ด์์/overflow ์ ์ฝ ํํผ | ๋ถ๋ชจ์ overflow:hidden, z-index ์ ์ฝ์ ํผํ ์ ์์ |
| ๋ํ ์ฌ์ฉ ์ฌ๋ก | Modal, Tooltip, Popover, Toast, Dropdown ๋ฑ |
| React 16+ | Portal์ React 16 ์ด์์์ ๊ธฐ๋ณธ ์ ๊ณต๋จ |
| ํญ๋ชฉ | React Portal | Vue Teleport |
|---|---|---|
| ๋ฌธ๋ฒ | JS ํจ์(ReactDOM.createPortal) |
<teleport> ํ
ํ๋ฆฟ ๋ฌธ๋ฒ |
| ์ ์ธ ์์น | JSX ๋ด๋ถ์์ ์ง์ ํจ์ ํธ์ถ | ํ ํ๋ฆฟ ์์์ ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉ |
| DOM ๋์ ์ง์ | container DOM element ์ง์ ์ ๋ฌ |
to ์์ฑ์ผ๋ก ์
๋ ํฐ ์ง์ |
| ์ด๋ฒคํธ ๋ฒ๋ธ๋ง | React ์ด๋ฒคํธ ํธ๋ฆฌ ์ ์ง | Vue์ ์ด๋ฒคํธ ํธ๋ฆฌ ์ ์ง |
| ๋ฐ์์ฑ | React state์ ์ฐ๊ฒฐ | Vue reactive context ๊ทธ๋๋ก ์ ์ง |
| ์ฃผ์ ์ฉ๋ | Modal, Tooltip, Dropdown | Modal, Tooltip, Dropdown |