TIL

dev-wholยท2021๋…„ 5์›” 3์ผ
0

โœ๐Ÿป Props

props๋ž€?

  • ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ(property)์„ ์˜๋ฏธํ•œ๋‹ค
    • ์„ฑ๋ณ„์ด๋‚˜ ์ด๋ฆ„์ฒ˜๋Ÿผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’, ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง„ ์†์„ฑ
  • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’
    • props๋ฅผ ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž(atguments)์ฒ˜๋Ÿผ ์ „๋‹ฌ
    • React ์—˜๋ฆฌ๋จผํŠธ ๋ฐ˜ํ™˜
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ์ดˆ ๋ Œ๋”๋ง๋  ๋•Œ์— ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด ํ˜•ํƒœ
    • ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’๋„ ๋„ฃ์–ด ์ „๋‹ฌ ๊ฐ€๋Šฅ
  • props๋Š” ์ฝ๊ธฐ ์ „์šฉ(read-only)
    • ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์•„ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’(side-effect ์˜ˆ๋ฐฉ)

props ์‚ฌ์šฉ ๋ฐฉ๋ฒ• 3๋‹จ๊ณ„

  1. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ์†์„ฑ์„ ์ •์˜

<Parent>,<Child> ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ

function Parent() {
  return (
    <div className="parent">
      <h1>parent</h1>
      <Child />
    </div>
  );
};
function Child() {
  return (
    <div className="child"></div>
  );
};
  1. props๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜ ๋œ ๊ฐ’๊ณผ ์†์„ฑ ์ „๋‹ฌ
    React์—์„œ JSX ์†์„ฑ ๋ฐ ๊ฐ’ ํ• ๋‹น ๋ฐฉ๋ฒ•

<Child attribute={value} />
<Child text={"I'm the eldest child"} />

  1. ์ „๋‹ฌ๋ฐ›์€ props ๋ Œ๋”๋ง
    props๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ๊ฐ์ฒด์˜ { key : value}๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    <Parent> ์ปดํฌ๋„ŒํŠธ์—์„œ ์ •์˜ํ•œ { attribute : value}๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
function Child(props) {
  return (
    <div className="child"></div>
    <p>{props.text}</p>
  );
};

๊ทธ ์™ธ props.children ๋ฐฉ๋ฒ•

ํƒœ๊ทธ ์‚ฌ์ด์— value๋ฅผ ๋„ฃ์–ด ์ „๋‹ฌ

function Parent() {
  return (
    <div className="parent">
        <h1>parent</h1>
        <Child>I'm the child</Child>
    </div>
  );
};
function Child(props) {
  return (
    <div className="child">
        <p>{props.children}</p>
    </div>
  );
};

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