๐งพ ์ฝ๋ฉ ์ปจ๋ฒค์ โ
๋ฉ์๋ณผ ํด๋ผ์ด์ธํธ ํ์ ์ฝ๋ ํ์ง๊ณผ ํ์
ํจ์จ์ ๋์ด๊ธฐ ์ํ ์ฝ๋ฉ ์ปจ๋ฒค์
์
๋๋ค.
๋ชจ๋ ํ์์ด ์ผ๊ด๋ ์คํ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์๋ ๊ท์น์ ์ค์ํด์ฃผ์ธ์.
๐ก ๋ณ์ โ
var
์ฌ์ฉ ๊ธ์ง,const
โlet
์์ผ๋ก ์ ์ธ- ๋ฌธ์์ด ์กฐํฉ ์
+
๋์ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด(`
) ์ฌ์ฉ - ๋ณ์๋ช
์ ์๋ฏธ๋ฅผ ๋ช
ํํ ๋๋ฌ๋ด๋๋ก ์์ฑ
- โ
users
,fruits
- โ
Arr
,tmp
,data1
- โ
- ์ค์๋ง ์ง์: ์๋ฏธ๊ฐ ๊ธธ๋๋ผ๋ ๋ช
ํํ ์ด๋ฆ ์ฌ์ฉ
- โ
Button
- โ
Btn
- โ
map()
์ฌ์ฉ ์, key๋ ๋ฐ๋์ ๊ณ ์ ํ ๊ฐ ์ฌ์ฉ- โ
key={index}
โ โ - โ
key={user.id}
๋๋uuid
- โ
- ์ ์ญ ๋ณ์๋ ์ง์ (๊ฐ๋ฅํ๋ฉด ๋ก์ปฌ ์ค์ฝํ ์ ์ง)
๐ต ํจ์ โ
- function ํค์๋ ๊ธ์ง, ํ์ดํ ํจ์๋ง ์ฌ์ฉ
- ๊ณตํต ํจ์๋
utils/
ํด๋๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ - ๋ณ์/ํจ์ ์ด๋ฆ์ 20์ ๋ฏธ๋ง
- ๋ค์ด๋ฐ์ ์๋ฏธ๋ฅผ ๋ด๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ฃผ์์ผ๋ก ๋ณด์
- Early Return ํจํด ๊ถ์ฅ
tsx
// โ
Early Return
const processUser = (user) => {
if (!user || !user.isActive) return;
// ์ดํ ๋ก์ง
};
๐ข ์ปดํฌ๋ํธ โ
- ๊ธฐ๋ณธ ํ
ํ๋ฆฟ์
rafce
์ฌ์ฉ (React Arrow Function Component with Export) - ๋ถํ์ํ wrapper๋ โ โ Fragment (
<>
) ์ฌ์ฉ ๊ถ์ฅ
tsx
const InfoText = () => {
return (
<>
<h1>Welcome!</h1>
<p>This is our new page!</p>
</>
);
};
- children์ด ์๋ ์ปดํฌ๋ํธ๋ self-closing (
<Component />
) - children ์ ๊ทน ํ์ฉํด UI ์ ์ฐํ๊ฒ ๊ตฌ์ฑ
๐ ํ์ (TypeScript) โ
object
ํ์ ์ interface ์ฌ์ฉ- ๋จ์ผ ๋ณ์ ํ์ ์ type alias
- ์ปดํฌ๋ํธ Props ํ์ ์ ์ปดํฌ๋ํธ ์๋จ์ ์ ์
- ๊ทธ ์ธ ํ์
์
types/
ํด๋์ ๋ถ๋ฆฌ - API ์๋ต ํ์
๋ค์ด๋ฐ:
OOOResponse
ํํ
ts
interface UserCardProps {
userId: string;
userName: string;
}
๐ด ๋ฉ์๋ โ
๋ฐฐ์ด ๋ณต์ฌ๋ ์คํ๋ ๋ ์ฐ์ฐ์(...) ์ฌ์ฉ
tsconst copy = [...originals];
for
๋ฃจํ ๋์map
,forEach
,filter
์ฌ์ฉ๊ตฌ์กฐ ๋ถํด ํ ๋น ์ ๊ทน ์ฌ์ฉ
ts
const checkUser = ({ userName, userBirth }: UserDataProps) => {
// ...
};
๋ถํ์ํ ๋ฐ๋ณต๋ฌธ ์ง์
- ์กฐ๊ฑด ๊ฒ์ ์
Map
,Object
, ์ธ๋ฑ์ค ์ ๊ทผ ๋ฐฉ์ ๊ณ ๋ ค
- ์กฐ๊ฑด ๊ฒ์ ์
โ ๊ธฐํ โ
button
ํ๊ทธ์๋type
๋ช ์ (type="button"
/"submit"
)- ๋น๊ต ์ฐ์ฐ์
===
,!==
๋ง ์ฌ์ฉ - axios๋ async/await ํจํด ์ฌ์ฉ, then/catch ๋์ :
ts
const fetchData = async () => {
try {
const res = await axios.get('/api/data');
} catch (err) {
console.error(err);
}
};
๐ ์ปจ๋ฒค์ ์ด ์ด๊ธ๋ ๊ฒฝ์ฐ ๋ฆฌ๋ทฐ ์ ์ฝ๋ฉํธ ๋ถํ๋๋ฆฌ๋ฉฐ, ๋ชจ๋๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋ ์์ฑ์ ์ฐ์ ํฉ๋๋ค.