Skip to content

๐Ÿงพ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ โ€‹

๋ฉ”์ž‡๋ณผ ํด๋ผ์ด์–ธํŠธ ํŒ€์˜ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ํ˜‘์—… ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋“  ํŒ€์›์ด ์ผ๊ด€๋œ ์Šคํƒ€์ผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์•„๋ž˜ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ด์ฃผ์„ธ์š”.


๐ŸŸก ๋ณ€์ˆ˜ โ€‹

  • 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;
}

๐Ÿ”ด ๋ฉ”์†Œ๋“œ โ€‹

  • ๋ฐฐ์—ด ๋ณต์‚ฌ๋Š” ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž(...) ์‚ฌ์šฉ

    ts
    const 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);
  }
};


๐Ÿ“Œ ์ปจ๋ฒค์…˜์ด ์–ด๊ธ‹๋‚œ ๊ฒฝ์šฐ ๋ฆฌ๋ทฐ ์‹œ ์ฝ”๋ฉ˜ํŠธ ๋ถ€ํƒ๋“œ๋ฆฌ๋ฉฐ, ๋ชจ๋‘๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์„ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.