์กฐ๊ฑด๋ถ ๋ ๋๋ง
์ปดํฌ๋ํธ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ํญ๋ชฉ์ ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. 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 ํธ๋ฆฌ์ โ๊ตฌ๋ฉโ์ผ๋ก ๊ฐ์ฃผํ๊ณ ๊ทธ ์๋ฆฌ์ ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์์ต๋๋ค.
๋ณ์์ ์กฐ๊ฑด๋ถ๋ก 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> ); }