๐Ÿง‹props.children ์ด๋ž€?

hyeryeonยท2024๋…„ 8์›” 12์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
10/19

props.children ์ด๋ž€?

React์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ prop์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ํƒœ๊ทธ ์‚ฌ์ด์— ์œ„์น˜ํ•œ ๋ชจ๋“  JSX๋‚˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์‹œ ๋งํ•ด์„œ, props.children์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์˜คํ”„๋‹ ํƒœ๊ทธ์™€ ํด๋กœ์ง• ํƒœ๊ทธ ์‚ฌ์ด์— ์‚ฝ์ž…๋œ ๋ชจ๋“  ๊ฒƒ์„ ์ž๋™์œผ๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” prop์ž…๋‹ˆ๋‹ค.

props.children์˜ ์‚ฌ์šฉ ์˜ˆ

function Card({ children }) {
  return <div className="card">{children}</div>;
}

function App() {
  return (
    <Card>
      <h1>Hello, World!</h1>
      <p>This is inside the card.</p>
    </Card>
  );
}

์—ฌ๊ธฐ์„œ Card ์ปดํฌ๋„ŒํŠธ๋Š” {children}์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€์— ํฌํ•จ๋œ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. App ์ปดํฌ๋„ŒํŠธ์—์„œ Card ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์— ์œ„์น˜ํ•œ <h1>๊ณผ <p> ํƒœ๊ทธ๋Š” Card ์ปดํฌ๋„ŒํŠธ์˜ children์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

props.children์˜ ์žฅ์ 

  • ์œ ์—ฐ์„ฑ: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ›์„ ์ž์‹ ์š”์†Œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉํ•˜๋Š” ์ธก์—์„œ ์ž์œ ๋กญ๊ฒŒ ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ: ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์–‘ํ•œ ๋‚ด์šฉ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ: ๋ณต์žกํ•œ UI๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋กœ ๊ฒน์น˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‚ Modal ์˜ˆ์‹œ

๋ชจ๋‹ฌ(dialog) ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ props.children์˜ ์œ ์šฉ์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Modal({ children }) {
  return (
    <div className="modal-background">
      <div className="modal-content">{children}</div>
    </div>
  );
}

function App() {
  return (
    <Modal>
      <h2>Confirm Your Action</h2>
      <p>Are you sure you want to delete this item?</p>
      <button>Confirm</button>
    </Modal>
  );
}

์—ฌ๊ธฐ์„œ Modal ์ปดํฌ๋„ŒํŠธ๋Š” ํ—ค๋”, ๋‚ด์šฉ, ๋ฒ„ํŠผ ๋“ฑ ์–ด๋– ํ•œ ๋‚ด์šฉ์ด๋“  ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์€ props.children ๋•๋ถ„์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

props.children์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ทธ ๋‚ด๋ถ€์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ ์˜ˆ์ธกํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.

โ“ Modal ์— ๋‚ด์šฉ์„ Prop์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

function Modal({ header, body, footer }) {
  return (
    <div className="modal-background">
      <div className="modal-header">{header}</div>
      <div className="modal-body">{body}</div>
      <div className="modal-footer">{footer}</div>
    </div>
  );
}

function App() {
  return (
    <Modal
      header={<h2>Confirm Your Action</h2>}
      body={<p>Are you sure you want to delete this item?</p>}
      footer={<button>Confirm</button>}
    />
  );
}

์žฅ์ 

  • ๋ช…ํ™•์„ฑ: ๊ฐ Prop์ด ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๋ช…ํ™•ํ•˜๋ฏ€๋กœ, ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜: ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์™ธ๋ถ€ API๋Š” ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž… ๊ฒ€์‚ฌ ์šฉ์ด: TypeScript์™€ ๊ฐ™์€ ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ, ๊ฐ Prop์˜ ํƒ€์ž…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด, ๋ฒ„๊ทธ๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ์œ ์—ฐ์„ฑ ์ œํ•œ: props.children์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด, ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค ํ˜•ํƒœ์˜ ์ž์‹๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋น„ํ•ด, prop์œผ๋กœ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์šฉ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ถ”๊ฐ€์ ์ธ ์„น์…˜์„ ๋ชจ๋‹ฌ์— ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ ๊ฐ ์„น์…˜์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด prop์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ, ๊ด€๋ จ๋œ ๋ชจ๋“  prop์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€