๐ย 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 |