์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

์ปดํฌ๋„ŒํŠธ๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. React๋Š” if ๋ฌธ, && ๋ฐ ? : ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ถ€๋กœ JSX๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ

  • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ JSX๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • JSX ์กฐ๊ฐ์„ ์กฐ๊ฑด๋ถ€๋กœ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•˜๋Š” ๋ฐฉ๋ฒ•
  • React ์ฝ”๋“œ์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด๋ถ€ ๋ฌธ๋ฒ•

์กฐ๊ฑด๋ถ€๋กœ JSX ๋ฐ˜ํ™˜ํ•˜๊ธฐ

์ง์„ ์ฑ™๊ฒผ๋Š”์ง€ ์•ˆ ์ฑ™๊ฒผ๋Š”์ง€ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Item์„ ๋ Œ๋”๋งํ•˜๋Š” PackingList ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

function Item({ name, isPacked }) {
  return <li className="item">{name}</li>;
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

Item ์ปดํฌ๋„ŒํŠธ ์ค‘ ์ผ๋ถ€๋Š” isPacked prop์ด false๊ฐ€ ์•„๋‹Œ true๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. isPacked={true}์ธ ๊ฒฝ์šฐ ์ง์„ ์ฑ™๊ธด ํ•ญ๋ชฉ์— ์ฒดํฌ ํ‘œ์‹œ(โœ…)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด if/else ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if (isPacked) {
return <li className="item">{name} โœ…</li>;
}
return <li className="item">{name}</li>;

isPacked prop์ด true์ด๋ฉด ์ด ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ JSX ํŠธ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ํ•ญ๋ชฉ์€ ๋์— ์ฒดํฌ ํ‘œ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  if (isPacked) {
    return <li className="item">{name} โœ…</li>;
  }
  return <li className="item">{name}</li>;
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ์ˆ˜์ •ํ•ด๋ณด๊ณ  ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”!

JavaScript์˜ if์™€ return ๋ฌธ์œผ๋กœ ๋ถ„๊ธฐ ๋กœ์ง์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์„ธ์š”. React์—์„œ ์ œ์–ด ํ๋ฆ„(์˜ˆ: ์กฐ๊ฑด๋ฌธ)์€ JavaScript๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด๋ถ€๋กœ null์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ธฐ

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ง์„ ์ฑ™๊ธด ํ•ญ๋ชฉ์„ ์ „ํ˜€ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์„ธ์š”. ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ์— null์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ง์ด์ฃ .

if (isPacked) {
return null;
}
return <li className="item">{name}</li>;

isPacked๊ฐ€ true๋ผ๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์ง€๋งŒ, false๋ผ๋ฉด JSX๊ฐ€ ๋ฐ˜ํ™˜๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  if (isPacked) {
    return null;
  }
  return <li className="item">{name}</li>;
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

์‹ค์ œ๋กœ ์ปดํฌ๋„ŒํŠธ์—์„œ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ Œ๋”๋งํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋†€๋ž„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”ํ•œ ๊ฒฝ์šฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋” ์ž์ฃผ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ JSX์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๋ณด์„ธ์š”!

์กฐ๊ฑด๋ถ€๋กœ JSX ํฌํ•จ์‹œํ‚ค๊ธฐ

์ด์ „ ์˜ˆ์‹œ์—์„œ๋Š” ์–ด๋–ค ํ•ญ๋ชฉ(์žˆ๋Š” ๊ฒฝ์šฐ)์„ ์ œ์–ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์— ์˜ํ•ด JSX ํŠธ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ Œ๋”๋ง๋œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์—์„œ ์ด๋ฏธ ์ผ๋ถ€ ์ค‘๋ณต์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<li className="item">{name} โœ…</li>

์ด๊ฒƒ์€ ์•„๋ž˜์™€ ๋งค์šฐ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

<li className="item">{name}</li>

๋‘ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๊ฐ€ ๋ชจ๋‘ <li className="item">...</li>๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

if (isPacked) {
return <li className="item">{name} โœ…</li>;
}
return <li className="item">{name}</li>;

์ด ์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. className์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ฝ”๋“œ์ƒ ๋‘ ๊ตฐ๋ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์กฐ๊ฑด๋ถ€๋กœ ์•ฝ๊ฐ„์˜ JSX๋ฅผ ํฌํ•จํ•ด ์ฝ”๋“œ๋ฅผ ๋” DRY(๋œ ๋ฐ˜๋ณต์ ์ด๊ฒŒ) ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž (? :)

JavaScript๋Š” ์กฐ๊ฑด ์—ฐ์‚ฐ์ž ๋˜๋Š” โ€œ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์žโ€๋ผ๋Š” ์กฐ๊ฑด์‹์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ ๋Œ€์‹ ,

if (isPacked) {
return <li className="item">{name} โœ…</li>;
}
return <li className="item">{name}</li>;

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

return (
<li className="item">
{isPacked ? name + ' โœ…' : name}
</li>
);

โ€isPacked๊ฐ€ ์ฐธ์ด๋ฉด (?) name + ' โœ”'์„ ๋ Œ๋”๋งํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด (:) name์„ ๋ Œ๋”๋งํ•œ๋‹ค.โ€ ๋ผ๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ธฐ

๋‘ ์˜ˆ์‹œ๋Š” ์™„์ „ํžˆ ๋™์ผํ• ๊นŒ์š”?

<li>์˜ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ โ€œ์ธ์Šคํ„ด์Šคโ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์œ„์˜ ๋‘ ์˜ˆ๊ฐ€ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JSX ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณด์œ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ DOM ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— โ€œ์ธ์Šคํ„ด์Šคโ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฒญ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ๋‘ ๊ฐ€์ง€ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ์™„์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ์—์„œ๋Š” ์ด ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์™„์„ฑ๋œ ํ•ญ๋ชฉ์˜ ํ…์ŠคํŠธ๋ฅผ <del>๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ HTML ํƒœ๊ทธ๋กœ ์ค„ ๋ฐ”๊ฟˆ ํ•˜์—ฌ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ JSX๋ฅผ ์ค‘์ฒฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ƒˆ๋กœ์šด ์ค„๊ณผ ๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  return (
    <li className="item">
      {isPacked ? (
        <del>
          {name + ' โœ…'}
        </del>
      ) : (
        name
      )}
    </li>
  );
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

์ด ์Šคํƒ€์ผ์€ ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์— ์ž˜ ์–ด์šธ๋ฆฌ์ง€๋งŒ, ์ ๋‹นํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ์กฐ๊ฑด๋ถ€ ๋งˆํฌ์—…์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์งˆ ๊ฒฝ์šฐ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ •๋ฆฌํ•˜์„ธ์š”. React์—์„œ ๋งˆํฌ์—…์€ ์ฝ”๋“œ์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ์‹์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ผ๋ฆฌ AND ์—ฐ์‚ฐ์ž (&&)

๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์†์‰ฌ์šด ๋ฐฉ๋ฒ•์€ JavaScript ๋…ผ๋ฆฌ AND (โ€™&&โ€™) ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. React ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ ์ผ๋ถ€ JSX๋ฅผ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด &&๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด isPacked๊ฐ€ true์ธ ๊ฒฝ์šฐ์—๋งŒ ์กฐ๊ฑด๋ถ€๋กœ ์ฒดํฌ ํ‘œ์‹œ๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

return (
<li className="item">
{name} {isPacked && 'โœ…'}
</li>
);

์ด๊ฒƒ์„ โ€œisPacked์ด๋ฉด (&&) ์ฒดํฌ ํ‘œ์‹œ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.โ€๋ผ๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž, ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  return (
    <li className="item">
      {name} {isPacked && 'โœ…'}
    </li>
  );
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

JavaScript && ํ‘œํ˜„์‹์€ ์™ผ์ชฝ(์กฐ๊ฑด)์ด true์ด๋ฉด ์˜ค๋ฅธ์ชฝ(์ฒดํฌ ํ‘œ์‹œ)์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์กฐ๊ฑด์ด false์ด๋ฉด ์ „์ฒด ํ‘œํ˜„ ์‹์ด false๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. React๋Š” false๋ฅผ null ๋˜๋Š” undefined์ฒ˜๋Ÿผ JSX ํŠธ๋ฆฌ์˜ โ€œ๊ตฌ๋ฉโ€์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๊ทธ ์ž๋ฆฌ์— ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃผ์˜ํ•˜์„ธ์š”!

&&์˜ ์™ผ์ชฝ์— ์ˆซ์ž๋ฅผ ๋‘์ง€ ๋งˆ์„ธ์š”.

์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด JavaScript๋Š” ์ž๋™์œผ๋กœ ์™ผ์ชฝ์„ ๋ถ€์šธ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™ผ์ชฝ์ด 0์ด๋ฉด ์ „์ฒด ์‹์ด (0)์„ ์–ป๊ฒŒ ๋˜๊ณ , React๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹Œ 0์„ ๋ Œ๋”๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”ํ•˜๊ฒŒ ํ•˜๋Š” ์‹ค์ˆ˜๋กœ messageCount && <p>New messages</p>์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์นด์šดํŠธ๊ฐ€ 0์ผ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์‰ฝ๊ฒŒ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 0 ์ž์ฒด๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด messageCount > 0 && <p>New messages</p> ์ฒ˜๋Ÿผ ์™ผ์ชฝ์„ ๋ถ€์šธ๋กœ ๋งŒ๋“œ์„ธ์š”.

๋ณ€์ˆ˜์— ์กฐ๊ฑด๋ถ€๋กœ JSX๋ฅผ ํ• ๋‹นํ•˜๊ธฐ

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์ผ๋ฐ˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜๋ฉด if ๋ฌธ๊ณผ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. let์œผ๋กœ ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ‘œ์‹œํ•  ๊ธฐ๋ณธ ๋‚ด์šฉ์ธ ์ด๋ฆ„์„ ๋จผ์ € ๋Œ€์ž…ํ•˜์„ธ์š”.

let itemContent = name;

if ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ isPacked๊ฐ€ true์ธ ๊ฒฝ์šฐ JSX ํ‘œํ˜„์‹์„ itemContent์— ๋‹ค์‹œ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

if (isPacked) {
itemContent = name + " โœ…";
}

์ค‘๊ด„ํ˜ธ๋Š” โ€œJavaScript๋กœ ๋“ค์–ด๊ฐ€๋Š” ์ฐฝโ€์„ ์—ฝ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ JSX ํŠธ๋ฆฌ์— ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด์ „์— ๊ณ„์‚ฐ๋œ ์‹์„ JSX ๋‚ด๋ถ€์— ์ค‘์ฒฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

<li className="item">
{itemContent}
</li>

์ด ์Šคํƒ€์ผ์€ ๊ฐ€์žฅ ์žฅํ™ฉํ•˜๋ฉด์„œ๋„ ๊ฐ€์žฅ ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ ์ค‘์ž…๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  let itemContent = name;
  if (isPacked) {
    itemContent = name + " โœ…";
  }
  return (
    <li className="item">
      {itemContent}
    </li>
  );
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

์ด์ „๊ณผ ๊ฐ™์ด ํ…์ŠคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž„์˜์˜ JSX์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  let itemContent = name;
  if (isPacked) {
    itemContent = (
      <del>
        {name + " โœ…"}
      </del>
    );
  }
  return (
    <li className="item">
      {itemContent}
    </li>
  );
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}

JavaScript๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด, ์ฒ˜์Œ์—๋Š” ์ด๋Ÿฐ ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ๋‚ฏ์„ค๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ํ•™์Šตํ•œ๋‹ค๋ฉด React ์ปดํฌ๋„ŒํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค JavaScript ์ฝ”๋“œ๋„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ฒ˜์Œ์— ๊ฐ€์žฅ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์„ ์„ ํƒํ•ด๋ณด๊ณ , ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฐ๋‹ค๋ฉด ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์š”์•ฝ

  • React์—์„œ JavaScript๋กœ ๋ถ„๊ธฐ ๋กœ์ง์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€๋กœ if ๋ฌธ๊ณผ ํ•จ๊ป˜ JSX ์‹์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€๋กœ ์ผ๋ถ€ JSX๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ ๋‹ค์Œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ JSX์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • JSX์—์„œ {cond ? <A /> : <B />}๋Š” โ€œcond์ด๋ฉด <A />๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด <B />๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.โ€ ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • JSX์—์„œ {cond && <A />}๋Š” โ€œcond์ด๋ฉด, <A />๋ฅผ ๋ Œ๋”๋งํ•˜๋˜, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.โ€ ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ ์˜ˆ์‹œ๋Š” ํ”ํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, if๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์ฑŒ๋ฆฐ์ง€ 1 of 3:
? :๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์˜ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

isPacked๊ฐ€ true๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(cond ? a : b)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ โŒ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

function Item({ name, isPacked }) {
  return (
    <li className="item">
      {name} {isPacked && 'โœ…'}
    </li>
  );
}

export default function PackingList() {
  return (
    <section>
      <h1>Sally Ride's Packing List</h1>
      <ul>
        <Item
          isPacked={true}
          name="Space suit"
        />
        <Item
          isPacked={true}
          name="Helmet with a golden leaf"
        />
        <Item
          isPacked={false}
          name="Photo of Tam"
        />
      </ul>
    </section>
  );
}