โ๐ป ํ๊ณ
๊ฐ์ฒด ๋ฐฐ์ด์ map() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ ์ค, ํน์ ์กฐ๊ฑด์์๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํด์ผ ํ๋ ์ํฉ์ด ์๊ฒผ๋ค.
์ด๋ JSX์์ && ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ง ํ์ํ๊ฐ์ ๋ํ ์๋ฌธ์ด ๋ค์ด, ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ์์ ๋ํด ๊ฐ๋จํ ํ์ตํด๋ณด์๋ค.
๐ ์ ๋ฆฌ
JSX์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง
{icon && <FontAwesomeIcon icon={icon} />} vs <FontAwesomeIcon icon={icon} />
๐ก ์์ํ๊ธฐ ์ ์: ์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ด ์ค์ํ๊ฐ?
๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ props๊ฐ ์ด๋ป๊ฒ ๋ค์ด์ค๋์ง์ ๋ฐ๋ผ ๋์์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค.
ํนํ ์์ด์ฝ, ์ด๋ฏธ์ง, ํ ์คํธ ๋ฑ ์ ํ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์์๋ค์ undefined, null ๋ฑ ๋น์ด ์์ ์๋ ์๋ ๋ฐ์ดํฐ์ ์ํด ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํด์ผ ํ ๋๊ฐ ๋ง๋ค.
์ด๋ฐ ์ํฉ์์ ์กฐ๊ฑด ์์ด ๋ฌด์์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ฒ ๋๋ฉด, ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค:
- ์ฝ์์ ๊ฒฝ๊ณ ๋ฉ์์ง ์ถ๋ ฅ
- ๋ ๋๋ง ์ค๋ฅ ๋ฐ์ (ํนํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ปดํฌ๋ํธ์ผ ๋)
- ์ฌ์ฉ์๊ฐ ๋ดค์ ๋ ์ด์ํ UI๊ฐ ๋ธ
์ํฉ ๋น๊ต
โ 1. ์์ ํ ๋ ๋๋ง ๋ฐฉ์
{icon && <FontAwesomeIcon icon={icon} />}
- icon์ด truthy(๊ฐ์ด ์กด์ฌ)ํ ๊ฒฝ์ฐ์๋ง ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋จ
- undefined, null, '' ๋ฑ falsyํ ๊ฐ์ผ ๊ฒฝ์ฐ ์์ ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๋ ๋๋ง๋์ง ์์
- ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ → ๋งค์ฐ ์์
โ 2. ๋ฌด์กฐ๊ฑด ๋ ๋๋ง
<FontAwesomeIcon icon={icon} />
- icon์ด undefined๋ผ๋ ๋ ๋๋ง์ ์๋ํจ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ icon์ด ํ์ prop์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ
- ์ฌ์ง์ด ๋ ๋๋ง์ ๋์ง๋ง ๋น ๊ณต๊ฐ์ด ์๊ธฐ๊ฑฐ๋, UI๊ฐ ๊นจ์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ์
์ &&๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
- ์๋ฐ์คํฌ๋ฆฝํธ์์ &&๋ ์งง์ ํ๊ฐ(short-circuit evaluation)๋ผ๋ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
์กฐ๊ฑด && ๊ฒฐ๊ณผ
- ์์ ์กฐ๊ฑด์ด false๋ฉด ๋ค๋ ํ๊ฐ์กฐ์ฐจ ํ์ง ์๊ณ ๋ฌด์
- ๋ฐ๋ผ์ false && <Component />๋ ๋ ๋๋ง๋์ง ์์
- ์กฐ๊ฑด์ด true์ฌ์ผ๋ง <Component />๊ฐ ์คํ๋จ
์์:
const icon = undefined;
// ์์ ํ ์กฐ๊ฑด๋ถ ๋ ๋๋ง
{icon && <FontAwesomeIcon icon={icon} />} // ์๋ฌด๊ฒ๋ ์ ๋์ด
// ๋ฌด์กฐ๊ฑด ๋ ๋๋ง
<FontAwesomeIcon icon={icon} /> // ์ฝ์ ์๋ฌ ๋๋ UI ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
JSX ์กฐ๊ฑด๋ถ ๋ ๋๋ง ์ ๋ฆฌ
| ๋ฐฉ๋ฒ | ์ค๋ช | ์ฌ์ฉ ์ํฉ |
| && ์ฐ์ฐ์ | ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ๋ ๋๋ง | ๋จ์ ์กฐ๊ฑด์ ์์ฃผ ์ฌ์ฉ |
| ์ผํญ ์ฐ์ฐ์ (? :) | ๋ ๊ฐ์ง ๊ฒฝ์ฐ ์ค ํ๋ ์ ํ | ๋ณด์ฌ์ค UI๊ฐ ๋ ๊ฐ์ง ์ด์์ผ ๋ |
| if๋ฌธ | JSX ๋ฐ์์ ์กฐ๊ฑด ์ฒ๋ฆฌ | ๋ ๋๋ง์ด ๋ง์ด ๋ฌ๋ผ์ง ๋ |
| ํจ์๋ก ๋ถ๊ธฐ | ๋ณต์กํ ์กฐ๊ฑด์ผ ๋ | ๊ฐ๋ ์ฑ์ ์ํด ๋ก์ง์ ๋ถ๋ฆฌํ ๋ |
์ค์ ์ค๋ฌด์์๋ ์ธ์ ์ด ํจํด์ ์ธ๊น?
- ์์ด์ฝ์ ์ ํ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ํน์ ๋ฒํผ์ ๋ณผ ์ ์๊ฒ ํ ๋
- ์ด๋ฏธ์ง๋ ๋ฐ์ดํฐ๊ฐ ์์ง ๋์ฐฉํ์ง ์์ ๋ก๋ฉ ์ํ ์ฒ๋ฆฌ
- props๋ก ๋ด๋ ค์จ ๊ฐ์ด ์ต์ ์ผ ๋ (nullable, optional)
์ ๋ฆฌ
- icon && <FontAwesomeIcon icon={icon} />๋ ์ปดํฌ๋ํธ๋ฅผ ์์ ํ๊ฒ ๋ ๋๋งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- <FontAwesomeIcon icon={icon} />๋ icon์ด undefined์ผ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ์ํํ ๋ฐฉ์์ด๋ค.
- JSX์์๋ ํญ์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ํจํด์ ์ตํ๋์. ํนํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋๋ undefined ์ฒดํฌ๋ฅผ ๋นผ๋จน์ง ์๋ ์ต๊ด์ด ์ค์ํ๋ค.
- JSX์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ UI ์ค๋ฅ ๋ฐฉ์ง์ ๋งค์ฐ ์ค์ํ๋ค.
- `&&` ์ฐ์ฐ์๋ฅผ ํ์ฉํ๋ฉด ๊ฐ์ด ์์ ๋๋ง ์์ ํ๊ฒ ๋ ๋๋ง ๊ฐ๋ฅํ๋ค.
'๐ Project > [30๋ถ] 1์ผ 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โฐ [Ver2] 30๋ถ? ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ์์ด์ดํ๋ ์ ์ด์ ์์ฑ (0) | 2025.04.27 |
|---|---|
| โฐ [Ver2] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ํ๋ก์ ํธ ๊ธฐํ ๋ฐฉํฅ (0) | 2025.04.24 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - Firebase, Supabase (0) | 2025.04.03 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - FlexBox (0) | 2025.04.02 |
| โฐ [Ver1] 30๋ถ ๊ฐ๋ฐ ๋ฐ ํ๊ณ - ์๋งจํฑํ๊ทธ, react-router-dom (0) | 2025.04.01 |