React - Portals

React Portals

ํˆดํŒ์„ ๋ Œ๋”๋งํ•˜๋˜ ๋„์ค‘ ์ƒ์œ„ ์ปดํฌ๋จผํŠธ์˜ style๋•Œ๋ฌธ์— ์œ„์น˜์žก๋Š”๋ฐ ์–ด๋ ค์›€์ด ์ƒ๊ฒผ๋‹ค Portal๋กœ ํ•ด๊ฒฐ๋ฌ๋‹ค

๋ณดํ†ต ์ปดํฌ๋จผํŠธ ๋ Œ๋”๋ง

render() {
  return (
    <div>
      {this.props.children}
    </div>
  );
}

์ปดํฌ๋จผํŠธ ๋ฉ”์„œ๋“œ์—์„œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ• ๋•Œ ๊ทธ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ €์‹์œผ๋กœ ๋งˆ์šดํŠธ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์œ„์ปดํฌ๋จผํŠธ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค.

Portals

render() {
  return ReactDOM.createPortal(
    this.props.children,
    document.getElementById('tooltip-root')
  );
}

Portals์„ ์‚ฌ์šฉํ•˜๋ฉด DOM ์–ด๋””๋“  ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์œ„ ์˜ˆ์ œ๋Š” ์•„์ด๋””๊ฐ€ tooltip-root์ธ DOM ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ž์‹์— ๋ Œ๋”๋ง์ด ๋œ๋‹ค.

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง

portal์ด DOM ํŠธ๋ฆฌ์˜ ์–ด๋””์—๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค ํ•˜๋”๋ผ๋„ ๋ชจ๋“  ๋‹ค๋ฅธ ๋ฉด์—์„œ ์ผ๋ฐ˜์ ์ธ React ์ž์‹์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. portal ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋Š” DOM ํŠธ๋ฆฌ์—์„œ๋Š” ๊ทธ ์ƒ์œ„๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ React ํŠธ๋ฆฌ์— ํฌํ•จ๋œ ์ƒ์œ„๋กœ ์ „ํŒŒ ๋œ๋‹ค.

Portals ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์— ๋Œ€ํ•œ ์˜ˆ์ œ


@๊น€๋Œ€์™„
์•ˆ๋…•ํ•˜์„ธ์š”

AboutGitHub