[ ์ฐธ๊ณ ์์ : ์ํ์ ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ(2ํ) - ํ๋น๋ฏธ๋์ด ]
โ ์กฐ๊ฑด๋ถ ๋ ๋๋ง (Conditional Rendering)
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ๋๋ง ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ก ํ๋ ๊ฒ
๐น 1. ์๋ฆฌ๋จผํธ ๋ณ์
- ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ณ์์ฒ๋ผ ์ ์ฅํด์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ๋ ๋๋ง
let button;
if (isLoggedIn) {
button = <LogoutButton />;
} else {
button = <LoginButton />;
}
return <div>{button}</div>;
๐น 2. ์ธ๋ผ์ธ ์กฐ๊ฑด
โถ ์ธ๋ผ์ธ If
- ์กฐ๊ฑด๋ฌธ์ ์ฝ๋ ์์ ์ง์ ์ง์ด๋ฃ๋ ๋ฐฉ์
- ๋ ผ๋ฆฌ ์ฐ์ฐ์ && (AND) ์ฌ์ฉ
- ์์ ์กฐ๊ฑด์ด true์ผ ๋๋ง ๋ค์ ์๋ฆฌ๋จผํธ๊ฐ ๋ ๋๋ง๋จ
- {isLoggedIn && <LogoutButton />}
โถ ์ธ๋ผ์ธ If-Else
- ์ผํญ ์ฐ์ฐ์ ? : ์ฌ์ฉ
- ์กฐ๊ฑด์ด true๋ฉด ์ฒซ ๋ฒ์งธ, false๋ฉด ๋ ๋ฒ์งธ ํญ๋ชฉ์ ๋ ๋๋ง
- ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ง ์๋ฆฌ๋จผํธ๋ฅผ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ณด์ฌ์ค ๋ ์ฌ์ฉ
- {isLoggedIn ? <LogoutButton /> : <LoginButton />}
๐น 3. ์ปดํฌ๋ํธ ๋ ๋๋ง ๋ง๊ธฐ
- ๋ฆฌ์กํธ์์๋ null์ ๋ฐํํ๋ฉด ํ๋ฉด์ ์๋ฌด๊ฒ๋ ๋ ๋๋ง๋์ง ์์
- ๋ ๋๋ง์ ๋ง๊ณ ์ถ์ ๋ ์ ์ฉ
function Warning({ show }) {
if (!show) return null;
return <div>๊ฒฝ๊ณ ๋ฉ์์ง์
๋๋ค!</div>;
}
๐ ๋ฆฌ์คํธ & ํค (List & Key)
๊ฐ์ ์ข ๋ฅ์ ์์ดํ ์ ์์๋๋ก ๋์ดํ ๊ฒ
๋ฆฌ์กํธ์์๋ ๋ฆฌ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๊ธฐ ์ํด ํค(Key) ์ฌ์ฉ์ด ์ค์ํจ
๐น 1. ๋ฆฌ์คํธ๋?
- ๊ฐ์ ์์ดํ ์ ์์๋๋ก ๋ชจ์ ๋์ ๊ตฌ์กฐ
- ๋ฆฌ์กํธ์์ ๋ฆฌ์คํธ๋ ์ฃผ๋ก map() ํจ์๋ฅผ ํตํด ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ ์ฌ์ฉ๋จ
๐น 2. ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ ๋ ๋๋ง
const names = ['Tom', 'Jerry', 'Spike'];
const nameList = names.map((name) => <li>{name}</li>);
- map() ํจ์๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์ปดํฌ๋ํธ๋ฅผ ์์ฑ
- ์์ฑ๋ ์๋ฆฌ๋จผํธ์๋ ๋ฐ๋์ key๋ฅผ ๋ถ์ฌํด์ผ ํจ โ
๐น 3. ํค(Key)๋? ๐ฏ
- ๊ฐ ๊ฐ์ฒด๋ ์์ดํ ์ ๊ตฌ๋ถํ ์ ์๋ ๊ณ ์ ํ ๊ฐ
- ๋ฆฌ์กํธ๊ฐ ๋ฆฌ์คํธ ๋ด์ ์์ดํ ์ ๋ณ๊ฒฝ/์ถ๊ฐ/์ญ์ ํ ๋ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ
๐น 4. ํค๊ฐ ์ฌ์ฉ๋ฒ
์ฌ์ฉ ์์ | ํน์ง | ์ฃผ์์ |
์ซ์ ๊ฐ ์ฌ์ฉ | ๊ฐ๋ฅ์ ํ๋, ์ค๋ณต๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ | ๋ฐฐ์ด์ ์ค๋ณต๋ ์ซ์ X |
id ์ฌ์ฉ (์ถ์ฒ) โ | ๊ณ ์ ํ ๊ฐ์ด๋ฏ๋ก ๊ฐ์ฅ ์ ํฉ | ๋ณดํต API๋ DB์์ ๋ฐ์์จ ๋ฐ์ดํฐ์ id ์ฌ์ฉ |
์ธ๋ฑ์ค ์ฌ์ฉ | ์์๊ฐ ๋ฐ๋์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | ์์ดํ ์์๊ฐ ๋ฐ๋๋ฉด ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ โ |
๐ธ ์ฃผ์: ํค๋ ๊ฐ์ ๋ฆฌ์คํธ ๋ด์์๋ง ๊ณ ์ ํ๋ฉด ๋จ
๐ธ ๋ช ์์ ํค ์์ผ๋ฉด, ๋ฆฌ์กํธ๊ฐ ์๋์ผ๋ก ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํจ (๋น์ถ์ฒ)
๐ ํผ(Form)์ด๋?
์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ํ ์์
๐น ์ ์ด ์ปดํฌ๋ํธ (Controlled Component)
- ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋ฆฌ์กํธ state๋ก ์ ์ด
- ์ ๋ ฅ๊ฐ์ ํญ์ ๋ฆฌ์กํธ๊ฐ ๊ด๋ฆฌ & ์ ๋ฐ์ดํธํจ
๐น ์ฃผ์ ์ ๋ ฅ ์์์ ํน์ง
์์ | ์ฉ๋ | ๋ฆฌ์กํธ์์ ์ฒ๋ฆฌ ๋ฐฉ์ |
input type="text" | ํ ์ค ํ ์คํธ ์ ๋ ฅ | value๋ก ๊ฐ ๊ด๋ฆฌ |
textarea | ์ฌ๋ฌ ์ค ํ ์คํธ ์ ๋ ฅ | value๋ก ๊ฐ ๊ด๋ฆฌ |
select | ๋๋กญ๋ค์ด ๋ชฉ๋ก ์ ํ | value๋ก ์ ํ๊ฐ ๊ด๋ฆฌ |
input type="file" | ํ์ผ ์ ๋ก๋ | ์ฝ๊ธฐ ์ ์ฉ → ๋น์ ์ด ์ปดํฌ๋ํธ๋ก ์ฌ์ฉ |
๐น ์ฌ๋ฌ ๊ฐ์ ์ ๋ ฅ ๋ค๋ฃจ๊ธฐ
- ์ ๋ ฅ ํ๋๋ง๋ค state๋ฅผ ๋ฐ๋ก ์ ์ธํ์ฌ ๊ด๋ฆฌ
- ๋๋ ๊ฐ์ฒด ํํ๋ก ๋ฌถ์ด ํ state์์ ๊ด๋ฆฌํ ์๋ ์์
๐น Input Null Value
- ์
๋ ฅ ํ๋์ ์์ ๋ก์ด ์
๋ ฅ์ ํ์ฉํ๋ ค๋ฉด
value={undefined} ๋๋ value={null} ๋ก ์ค์ ๊ฐ๋ฅ
๐ Shared State (๊ณต์ ์ํ)
์ฌ๋ฌ ํ์ ์ปดํฌ๋ํธ๊ฐ ๊ณตํต๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ.
๐ผ State ๋์ด์ฌ๋ฆฌ๊ธฐ (Lifting State Up)
ํ์ ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํ๋ state๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ์ฌ๋ ค์ ๊ณต์
- ๋ถ๋ชจ๊ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ
- ํ์ ์ปดํฌ๋ํธ๋ค์ props๋ก ๊ทธ ์ํ๋ฅผ ์ฝ๊ฑฐ๋ ์ ๋ฐ์ดํธ
๋ ๊ฐ ์ด์์ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ ๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ผ๋ก,
๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ๋ฅผ ์๊ฒ ๋๋๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ค์ํ๋ฏ๋ก ์์ฃผ ์ฌ์ฉ๋จ.
(๊ณตํต state๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํ๊ฒ ๋ง๋ค๊ณ ,
ํ์ํ ์์ ์ปดํฌ๋ํธ๋ค์ props๋ก ๋ด๋ ค์ค)
'๐ฉโ๐ป ๊ฐ๋ฐ ๊ณต๋ถ > ๊ฐ๋ฐ ์์ Read&Write' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฒ์ ๋ง๋ ๋ฆฌ์กํธ] React ์ฑ ์ฝ๊ธฐ : Chapter 6-8 ์ ๋ฆฌ (0) | 2025.04.04 |
---|---|
[์ฒ์ ๋ง๋ ๋ฆฌ์กํธ] React ์ฑ ์ฝ๊ธฐ : Chapter 0-5 ์ ๋ฆฌ (0) | 2025.04.04 |