React ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ฉด ๋ชจ๋ฌ์ ์ ๋ง ์์ฃผ ์ฐ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ, ๋จ์ํ "๋ชจ๋ฌ UI"๋ง ์๋ค๊ณ ํด์ ์ง์ง '๋ชจ๋ฌ๋ต๊ฒ' ๋์ํ๋ ๊ฑด ์๋๋๋ผ๊ณ ์.
์ต๊ทผ ์ ๊ฐ ๊ฒช์๋ ์ฌ๋ก๋ฅผ ๊ณต์ ๋๋ฆฌ๋ฉฐ,
React Portal์ด ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ๋ฐฉ์์์ ์ด๋ค ๋ฌธ์ ๊ฐ ์์๋์ง ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
๋ํ์ ์ ํ ๋ชจ๋ฌ์ ๋์ฐ๋ ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์,
๊ฐ์ Modal ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ๋, ์ด๋ค ๋ชจ๋ฌ์ ์ ์์ ์ผ๋ก ํ๋ฉด ์ ์ฒด๋ฅผ ๋ฎ๊ณ , ์ด๋ค ๋ชจ๋ฌ์ ์๋จ ๋ค๋น๊ฒ์ด์ ์ด ๋ซ๋ฆฌ๋ ํ์์ ๊ฒฝํํ์ต๋๋ค.
๋ชจ๋ฌ ์ข ๋ฅ | ๋์ ์ฌ๋ถ |
---|---|
โ ๋ถ์ ์ ํ ๋ชจ๋ฌ | ์ ์ ์๋ (์ ์ฒด ์ค๋ฒ๋ ์ด) |
โ ์ฌ์ฉ์ ์ ํ ๋ชจ๋ฌ | ์๋จ ๋ฉ๋ด ๋ซ๋ฆผ ํ์ ๋ฐ์ |
๋ถ๋ช ํ ๊ฐ์ ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ ๊ทธ๋ด๊น?
z-index
์ ๋ฐฐ์ ๋ฌธ์ ๋ ๋ชจ๋ฌ์ด ๋ ๋๋ง๋๋ ์์น์ ์์์ต๋๋ค.
์ฌ์ฉ์ ์ ํ ๋ชจ๋ฌ์ form
๋ด๋ถ ๊น์ ์์น์์ ๋ ๋๋ง๋์๊ณ ,
์ด ๊ฒฝ์ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ค์ position: relative
, overflow: hidden
, z-index
์ค์ ์ด ์ํฅ์ ์ฃผ๊ฒ ๋ฉ๋๋ค.
์ฆ, ์๊ฐ์ ์ผ๋ก๋ '๋ชจ๋ฌ์ฒ๋ผ' ๋ณด์ฌ๋,
์ค์ ๋ก๋ ์์ DOM ๊ตฌ์กฐ์ ๊ฐํ, ์ ์ฝ์ด ๋ง์ ๋ชจ๋ฌ์ด์๋ ๊ฑฐ์ฃ .
React์์๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณต์์ ์ธ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
React Portal: ๋ถ๋ชจ DOM ๋ฐ๊นฅ์ ์์์ ๋ ๋๋งํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ฅ์ | ์ค๋ช |
---|---|
โ DOM ๊ตฌ์กฐ์ ์๊ด์์ด ์ต์๋จ ๋ ๋๋ง | document.body ์๋์ ์ง์ ์ฝ์
๋๋ฏ๋ก ๋ถ๋ชจ ๊ตฌ์กฐ ๋ฌด๊ด |
โ ์์ ํ ์ค๋ฒ๋ ์ด ๊ตฌํ ๊ฐ๋ฅ | position: fixed ๋ก ํ๋ฉด ์ ์ฒด ๋ฎ๊ธฐ ์๋ฒฝ ๋ณด์ฅ |
โ z-index ์ถฉ๋ ์ต์ํ | ํน์ ํธ๋ฆฌ ๋ด z-index ์์ ๋ฌธ์ ํํผ ๊ฐ๋ฅ |
โ ๋ชจ๋ฌ, ํ ์คํธ, ๋๋กญ๋ค์ด ๋ฑ์ ์ ํฉ | ์๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ์ค์ํ ์ปดํฌ๋ํธ์ ์ต์ |
tsx
๋ณต์ฌํธ์ง
return ReactDOM.createPortal(modalContent, document.body);
์ ํ ์ค๋ง์ผ๋ก ๋ชจ๋ฌ์ ์ด์ ์ด๋ค ๋ถ๋ชจ ๊ตฌ์กฐ์๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ ๋๋ง๋ฉ๋๋ค.
ํ์ | ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|---|
๋ชจ๋ฌ์ด ์๋จ ๋ฉ๋ด๋ฅผ ๊ฐ๋ฆฌ์ง ๋ชปํจ | ๋ด๋ถ DOM์ ๋ ๋๋ง โ ๋ถ๋ชจ์ CSS ์ํฅ | React Portal๋ก DOM ๋ถ๋ฆฌ |
์ค๋ฒ๋ ์ด๊ฐ ์ ์ฒด ํ๋ฉด์ ๋ฎ์ง ์์ | ๋ถ๋ชจ ์์๊ฐ ๊ธฐ์ค์ด ๋๋ absolute ๊ตฌ์กฐ ๋๋ฌธ | fixed + Portal ๊ตฌ์กฐ๋ก ๊ต์ฒด |
์ด๋ค ๋ชจ๋ฌ์ ๋๊ณ ์ด๋ค ๋ชจ๋ฌ์ ์ ๋๋ ํ์ ๋ฐ์ | DOM ์์น์ ๋ฐ๋ผ ๋ชจ๋ฌ์ด ๋ ๋๋ง๋๋ ์์น๊ฐ ๋ฌ๋๊ธฐ ๋๋ฌธ | ๋ชจ๋ ๋ชจ๋ฌ์ Portal ๊ธฐ๋ฐ์ผ๋ก ํต์ผ |
React์์ ๋ชจ๋ฌ, ํ ์คํธ, ๋๋กญ๋ค์ด ๋ฑ์ ๋จ์ํ UI ์์๊ฐ ์๋๋๋ค.
๋ ๋๋ง ์์น์ ๋ ์ด์ด ๊ตฌ์กฐ๊น์ง ๊ณ ๋ คํ ์ค๊ณ๊ฐ ํ์ํ๋ฉฐ, ์ด๋ฅผ ๊ฐ์ฅ ์์ ์ ์ผ๋ก ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก React Portal์ ๋๋ค.
์ ์ฒ๋ผ "๋ชจ๋ฌ์ด ํ๋ฉด ์ ์ฒด๋ฅผ ๋ฎ์ง ๋ชปํ๋ ๋ฌธ์ "๋ฅผ ๊ฒช์ผ์ จ๋ค๋ฉด,
๋ชจ๋ฌ ๊ตฌ์กฐ๋ฅผ ์ ๊ฒํ์๊ณ , Portal ๋์ ์ ๊ณ ๋ คํด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค.
โ์ ๊ฐ์ ๋ชจ๋ฌ์ธ๋ฐ ํ๋๋ ๋๊ณ ํ๋๋ ์ ๋ผ?โ
์ด ์ง๋ฌธ์ ๋ต์ ์ค ์ ์๋ ์๊ฐ,
React๋ฅผ ๋ ๊น๊ฒ ์ดํดํ๊ฒ ๋์ ๊ฒ๋๋ค. ๐