[React] ๋ฆฌ์•กํŠธ Portal(ํฌํƒˆ) ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‹ฌ ๊ตฌํ˜„ํ•˜๊ธฐ

2024. 4. 29. 18:24ยท๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ/React

์ฐธ๊ณ 

https://react.dev/reference/react-dom/createPortal

 

createPortal – React

The library for web and native user interfaces

react.dev

 

https://abangpa1ace.tistory.com/entry/React-Portal-%ED%8F%AC%ED%83%88

 

[React] Portal (ํฌํƒˆ), Modal ๊ตฌํ˜„ํ•˜๊ธฐ

ํšŒ์‚ฌ์—์„œ ์„ ๋ฐฐ์™€ React๋กœ ๋ชจ๋‹ฌ ๊ตฌํ˜„์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ์ด์—ˆ๋‹ค. ์šฐ๋ฆฌ ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ๋Š” Vue๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”Œ๋Ÿฌ๊ทธ์ธ(this.$modal) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฃจํŠธ์— ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฃผ์ž…, ์‚ญ์ œํ•ด

abangpa1ace.tistory.com

https://dev-bomdong.tistory.com/21

 

React | Portal์„ ์ด์šฉํ•œ Modal ๊ตฌํ˜„

ํ•œ๊ตญ์ธ์—๊ฒŒ portal์ด๋ž€.. ๋‹ฅํ„ฐ์ŠคํŠธ๋ ˆ์ธ์ง€์˜ ๋งˆ๋ฒ•์ง„๊ฐ™์€ ํฌํƒˆ๋งŒ ๋– ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์ต์ˆ™ํ•œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค๋Š” ๊ฐœ๋…์„ ์ด์–ด๋ฐ›์•„, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ”๊นฅ์— ๋ Œ๋”๋งํ•ด์ฃผ

dev-bomdong.tistory.com

https://jeonghwan-kim.github.io/2022/06/02/react-portal

 

๋ฆฌ์•กํŠธ Portal

…

jeonghwan-kim.github.io

 

ํฌํƒˆ ์‚ฌ์šฉ ์ด์œ 

ํฌํƒˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ/์ž์‹ ๊ด€๊ณ„๋Š” ์œ ์ง€ํ•˜์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ์œ„์น˜์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค.

→ CSS ์ƒ์† ๊ตฌ์กฐ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Œ

 

์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ข‹๋‹ค๊ณ  ๋А๋‚€ ์ ์€ z-index์—์„œ ์ž์œ ๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

ํ’€ ์Šคํฌ๋ฆฐ ๋ชจ๋‹ฌ์ผ ๊ฒฝ์šฐ z-index๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ ,

dimmed ๋ฐฐ๊ฒฝ์ด ๊น”๋ฆด ๊ฒฝ์šฐ dimmed ๋ฐฐ๊ฒฝ์š”์†Œ๋งŒ ๊ณ ๋ คํ•ด์„œ z-index๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋˜์–ด์„œ ์ข‹์•˜๋‹ค.

 

ํฌํƒˆ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‹ฌ ๊ตฌํ˜„ํ•˜๊ธฐ

1. div ํƒœ๊ทธ ์ถ”๊ฐ€

 

 

2. ModalPotal ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

createPortal(๋ Œ๋”๋ง ์š”์†Œ, ํƒ€๊ฒŸ๋˜๋Š” ๋ถ€๋ชจ์š”์†Œ)

import { createPortal } from 'react-dom'

const ModalPotal = ({ children }: { children: React.ReactElement }) => {
  const modal = document.getElementById('modal')!

  return createPortal(children, modal)
}

export default ModalPotal

 

3. Modal ์ถ”๊ฐ€ํ•˜๊ธฐ

๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ๋’ค ๋งŒ๋“ค์–ด๋‘” ModalPotal์„ ๊ฐ์‹ธ๋ฉด ์™„๋ฃŒ

div ํƒœ๊ทธ ์ž์‹์š”์†Œ๋กœ ์ž˜ ๋ Œ๋”๋ง๋œ๋‹ค.

 

728x90
'๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [React] Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
  • [React] ๋ฐฐ์—ด ๋ Œ๋”๋ง์— key๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
  • [storybook] ์Šคํ† ๋ฆฌ๋ถ chromatic, github actions ์‚ฌ์šฉํ•ด์„œ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๊ธฐ
  • [storybook] ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์Šคํ† ๋ฆฌ๋ถ ์‚ฌ์šฉํ•˜๊ธฐ
_์ด์•Ž
_์ด์•Ž
๊ณต๋ถ€ ๊ธฐ๋ก ๋ธ”๋กœ๊ทธ
  • _์ด์•Ž
    ๊ณต๋ถ€
    _์ด์•Ž
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • โœ๏ธ ๋ชจ๋“  ๊ธ€ (51)
      • ๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ (36)
        • React (9)
        • HTML_CSS (9)
        • Javascript (13)
        • git_github (4)
        • Web (1)
      • ๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ๋ฐ ํ™œ๋™ (11)
        • ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ 19๊ธฐ (11)
      • ๐Ÿ“ ๊ณต์‹๋ฌธ์„œ ์ดํ•ดํ•˜๊ธฐ (0)
      • โš™๏ธ etc. (4)
  • ๋งํฌ

    • ๐Ÿ‘‹ GitHub
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ธฐ๋ก
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
_์ด์•Ž
[React] ๋ฆฌ์•กํŠธ Portal(ํฌํƒˆ) ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‹ฌ ๊ตฌํ˜„ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”