Skip to content

๐Ÿคบ ์ปค์Šคํ…€ react ์Šค๋‹ˆํŽซ ๋งŒ๋“ค๊ธฐ

JiSu Kim edited this page Dec 5, 2024 · 1 revision

VSCode์˜ ์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ์„ ํ™œ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ import ๋ฌธ ์—†์ด ๊น”๋”ํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. image

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ์Šค๋‹ˆํŽซ์ธ rfck (ํ”„๋กญ์Šค ์—†๋Š” ์ปดํฌ๋„ŒํŠธ)๊ณผ rfckp (ํ”„๋กญ์Šค ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

  1. ์Šค๋‹ˆํŽซ ์„ค์ •ํ•˜๊ธฐ
  2. ์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ ์ƒ์„ฑ
  3. ์Šค๋‹ˆํŽซ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  4. ์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ
  5. ์Šค๋‹ˆํŽซ ํ…Œ์ŠคํŠธ ๋ฐ ํ™œ์šฉ
  6. ๊ฒฐ๋ก 
  7. ์ถ”๊ฐ€ ํŒ

์Šค๋‹ˆํŽซ ์„ค์ •ํ•˜๊ธฐ

์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ์„ ์„ค์ •ํ•˜๊ธฐ ์ „์—, VSCode์—์„œ ์Šค๋‹ˆํŽซ ์„ค์ •์„ ์—ฌ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ ํŒŒ์ผ ์œ ํ˜•์— ๋งž๋Š” ์Šค๋‹ˆํŽซ ํŒŒ์ผ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

VSCode์—์„œ ์Šค๋‹ˆํŽซ ์„ค์ • ์—ด๊ธฐ

  1. VSCode ์—ด๊ธฐ: VSCode๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ช…๋ น ํŒ”๋ ˆํŠธ ์—ด๊ธฐ:

    • Windows/Linux: Ctrl + Shift + P
    • macOS: Cmd + Shift + P
  3. ์Šค๋‹ˆํŽซ ์„ค์ • ์„ ํƒ: Command Palette ๋ช…๋ น ํŒ”๋ ˆํŠธ์— "Preferences: Configure User Snippets"๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. ์–ธ์–ด ์„ ํƒ: ์‚ฌ์šฉ ์ค‘์ธ ํŒŒ์ผ ์œ ํ˜•์— ๋”ฐ๋ผ ์Šค๋‹ˆํŽซ ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • TypeScript (TSX): typescriptreact.json ์„ ํƒ
    • JavaScript (JSX): javascriptreact.json ์„ ํƒ

TypeScript (TSX)์šฉ ์Šค๋‹ˆํŽซ ์„ค์ •

TSX ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์Šค๋‹ˆํŽซ์„ ์„ค์ •ํ•˜๋ ค๋ฉด typescriptreact.json ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ TypeScript React ํŒŒ์ผ์— ์ ์šฉ๋˜๋Š” ์Šค๋‹ˆํŽซ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

JavaScript (JSX)์šฉ ์Šค๋‹ˆํŽซ ์„ค์ •

JSX ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์Šค๋‹ˆํŽซ์„ ์„ค์ •ํ•˜๋ ค๋ฉด javascriptreact.json ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ JavaScript React ํŒŒ์ผ์— ์ ์šฉ๋˜๋Š” ์Šค๋‹ˆํŽซ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ ์ƒ์„ฑ

VSCode์—์„œ ์Šค๋‹ˆํŽซ ์„ค์ •์„ ์—ฐ ํ›„, rfck์™€ rfckp ์Šค๋‹ˆํŽซ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋กญ์Šค ์—†๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํ”„๋กญ์Šค ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์Šค๋‹ˆํŽซ ๋ช…์นญ์€ ์‚ฌ์šฉ์ž์˜ ์›ํ•˜๋Š” ์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ œ ์ด๋‹ˆ์…œ k๋ฅผ ๋’ค์— ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. props๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, p๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค๋‹ˆํŽซ: rfck

ํ”„๋กญ์Šค๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šค๋‹ˆํŽซ์ž…๋‹ˆ๋‹ค.

{
  "React Functional Component without Props": {
    "prefix": "rfck",
    "body": [
      "export default function ${TM_FILENAME_BASE}() {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "};"
    ],
    "description": "Create a React Functional Component using the filename as the component name without Props"
  }
}

์„ค๋ช…:

  • prefix: rfck - ์Šค๋‹ˆํŽซ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ถ•ํ‚ค์ž…๋‹ˆ๋‹ค.
  • body: ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ${TM_FILENAME_BASE}๋Š” ํ˜„์žฌ ํŒŒ์ผ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • $0: ์ปค์„œ์˜ ์ตœ์ข… ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค๋‹ˆํŽซ: rfckp

ํ”„๋กญ์Šค๋ฅผ ํฌํ•จํ•œ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šค๋‹ˆํŽซ์ž…๋‹ˆ๋‹ค.

json
์ฝ”๋“œ ๋ณต์‚ฌ
{
  "React Functional Component with Props": {
    "prefix": "rfckp",
    "body": [
      "interface ${TM_FILENAME_BASE}Props {",
      "  $2",
      "}",
      "",
      "export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "}"
    ],
    "description": "Create a React Functional Component using the filename as the component name with Props"
  }
}

์„ค๋ช…:

  • prefix: rfckp - ์Šค๋‹ˆํŽซ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ถ•ํ‚ค์ž…๋‹ˆ๋‹ค.
  • body: Props ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•จ๊ป˜ ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • interface ${TM_FILENAME_BASE}Props { ... }: ํŒŒ์ผ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ Props ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) { ... }: Props๋ฅผ destructuringํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • $0: ์ปค์„œ์˜ ์ตœ์ข… ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋‹ˆํŽซ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ์„ ์„ค์ •ํ•œ ํ›„, ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์Šค๋‹ˆํŽซ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ (rfck)

  1. ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ƒ์„ฑ:
    • ์˜ˆ: Header.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šค๋‹ˆํŽซ ์ ์šฉ:
    • ํŒŒ์ผ ๋‚ด์—์„œ rfck์„ ์ž…๋ ฅํ•˜๊ณ  Tab ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  3. ์ž๋™ ์ƒ์„ฑ๋œ ์ฝ”๋“œ:

image

export default function Header() {
  return <div></div>;
}

์„ค๋ช…:

  • Header ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กญ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Props ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํ”„๋กญ์Šค destructuring์ด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • <div> ๋‚ด๋ถ€์— ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•˜์—ฌ ์ฆ‰์‹œ JSX ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ (rfckp)

  1. ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ƒ์„ฑ:
    • ์˜ˆ: Header.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šค๋‹ˆํŽซ ์ ์šฉ:
    • ํŒŒ์ผ ๋‚ด์—์„œ rfckp์„ ์ž…๋ ฅํ•˜๊ณ  Tab ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  3. ์ž๋™ ์ƒ์„ฑ๋œ ์ฝ”๋“œ:

image

interface HeaderProps {
  // ์—ฌ๊ธฐ์— props๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
}

export default function Header({}: HeaderProps) {
  return <div></div>;
}

์„ค๋ช…:

  • HeaderProps ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ํ”„๋กญ์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Header ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, HeaderProps ํƒ€์ž…์˜ ํ”„๋กญ์Šค๋ฅผ destructuringํ•˜์—ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • <div> ๋‚ด๋ถ€์— ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•˜์—ฌ ์ฆ‰์‹œ JSX ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ

์Šค๋‹ˆํŽซ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€์ ์ธ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CSS ๋ชจ๋“ˆ ์ž„ํฌํŠธ ์ถ”๊ฐ€

ํ”„๋กญ์Šค๊ฐ€ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค๋‹ˆํŽซ(rfckp)์— CSS ๋ชจ๋“ˆ์„ ์ž๋™์œผ๋กœ ์ž„ํฌํŠธํ•˜๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

json
์ฝ”๋“œ ๋ณต์‚ฌ
{
  "React Functional Component with Props and CSS Module": {
    "prefix": "rfckp",
    "body": [
      "import styles from './${TM_FILENAME_BASE}.module.css';",
      "",
      "interface ${TM_FILENAME_BASE}Props {",
      "  $2",
      "}",
      "",
      "export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
      "  return (",
      "    <div className={styles.${TM_FILENAME_BASE}}> // ์Šคํƒ€์ผ ํด๋ž˜์Šค ์ž๋™ ์„ค์ •",
      "      $0",
      "    </div>",
      "  );",
      "}"
    ],
    "description": "Create a React Functional Component with Props Interface and CSS Module using the filename as the component name"
  }
}

์„ค๋ช…:

  • import styles from './${TM_FILENAME_BASE}.module.css';: ์ปดํฌ๋„ŒํŠธ์— ๋Œ€์‘ํ•˜๋Š” CSS ๋ชจ๋“ˆ์„ ์ž๋™์œผ๋กœ ์ž„ํฌํŠธํ•ฉ๋‹ˆ๋‹ค.
  • className={styles.${TM_FILENAME_BASE}}: CSS ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์Šคํƒ€์ผ๋ง์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • prefix: ๊ธฐ์กด rfckp ์Šค๋‹ˆํŽซ๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜, ๋ณ„๋„์˜ prefix (rfckpcss)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Props ์„ค์ •

ํ”„๋กญ์Šค ์žˆ๋Š” ์Šค๋‹ˆํŽซ์— ๊ธฐ๋ณธ์ ์ธ ํ”„๋กญ์Šค ๊ตฌ์กฐ๋ฅผ ํฌํ•จ์‹œ์ผœ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "React Functional Component with Props and Default Props Interface": {
    "prefix": "rfckp",
    "body": [
      "interface ${TM_FILENAME_BASE}Props {",
      "  $2: string;",
      "  // ์ถ”๊ฐ€ props๋ฅผ ์—ฌ๊ธฐ์— ์ •์˜ํ•˜์„ธ์š”.",
      "}",
      "",
      "export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "}"
    ],
    "description": "Create a React Functional Component with a default Props Interface named after the filename"
  }
}

์„ค๋ช…:

  • "$2: string;": ๊ธฐ๋ณธ์ ์ธ string ํƒ€์ž…์˜ ํ”„๋กญ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กญ์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ํƒ€์ž… ๋ช…์‹œ

TypeScript์˜ React.FC ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

json
์ฝ”๋“œ ๋ณต์‚ฌ
{
  "React Functional Component with Props and React.FC": {
    "prefix": "rfckp",
    "body": [
      "interface ${TM_FILENAME_BASE}Props {",
      "  $2",
      "}",
      "",
      "const ${TM_FILENAME_BASE}: React.FC<${TM_FILENAME_BASE}Props> = ({ $3 }) => {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "};",
      "",
      "export default ${TM_FILENAME_BASE};"
    ],
    "description": "Create a React Functional Component with Props Interface using React.FC and the filename as the component name"
  }
}

์„ค๋ช…:

  • React.FC: ์ปดํฌ๋„ŒํŠธ์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๋” ๋‚˜์€ ํƒ€์ž… ์ถ”๋ก ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • const ${TM_FILENAME_BASE}: React.FC<${TM_FILENAME_BASE}Props> = ({ $3 }) => { ... }: ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋ฐฉ์‹์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋‹ˆํŽซ ํ…Œ์ŠคํŠธ ๋ฐ ํ™œ์šฉ

์„ค์ •ํ•œ ์Šค๋‹ˆํŽซ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ (rfck)

  1. ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ƒ์„ฑ:

    • ์˜ˆ: Button.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šค๋‹ˆํŽซ ์ ์šฉ:

    • ํŒŒ์ผ ๋‚ด์—์„œ rfck์„ ์ž…๋ ฅํ•˜๊ณ  Tab ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  3. ์ž๋™ ์ƒ์„ฑ๋œ ์ฝ”๋“œ:

    export default function Button() {
      return <div></div>;
    }

    ํ™•์ธ ์‚ฌํ•ญ:

    • Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ํ”„๋กญ์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • <div> ๋‚ด๋ถ€์— ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•˜์—ฌ ์ฆ‰์‹œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กญ์Šค ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ (rfckp)

  1. ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ƒ์„ฑ:

    • ์˜ˆ: Navbar.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šค๋‹ˆํŽซ ์ ์šฉ:

    • ํŒŒ์ผ ๋‚ด์—์„œ rfckp์„ ์ž…๋ ฅํ•˜๊ณ  Tab ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  3. ์ž๋™ ์ƒ์„ฑ๋œ ์ฝ”๋“œ:

    interface NavbarProps {
      // ์—ฌ๊ธฐ์— props๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
    }
    
    export default function Navbar({}: NavbarProps) {
      return <div></div>;
    }

    ํ™•์ธ ์‚ฌํ•ญ:

    • NavbarProps ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • Navbar ์ปดํฌ๋„ŒํŠธ๊ฐ€ NavbarProps ํƒ€์ž…์˜ ํ”„๋กญ์Šค๋ฅผ ๋ฐ›๋„๋ก ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • <div> ๋‚ด๋ถ€์— ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•˜์—ฌ ์ฆ‰์‹œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ปค์Šคํ…€ ์Šค๋‹ˆํŽซ์„ ํ™œ์šฉํ•˜๋ฉด ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋”์šฑ ๋น ๋ฅด๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, TypeScript์˜ interface๋ฅผ ํฌํ•จํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ Props๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถˆํ•„์š”ํ•œ import ๋ฌธ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊น”๋”ํ•จ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์Šค๋‹ˆํŽซ์ธ rfck๊ณผ rfckp๋ฅผ ํ†ตํ•ด ํ”„๋กญ์Šค์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ํŒ

  • ๋‹ค์–‘ํ•œ ์Šค๋‹ˆํŽซ ์ƒ์„ฑ: ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ๋‹ค์–‘ํ•œ ์Šค๋‹ˆํŽซ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ค„์ด์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ, ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ, HOC ๋“ฑ์„ ์œ„ํ•œ ์Šค๋‹ˆํŽซ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต์œ  ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ: ํŒ€์›๋“ค๊ณผ ์Šค๋‹ˆํŽซ์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ Git๊ณผ ๊ฐ™์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋‹ˆํŽซ์„ ๊ด€๋ฆฌํ•˜์„ธ์š”.
  • ์ž๋™ํ™” ๋„๊ตฌ ํ™œ์šฉ: ์Šค๋‹ˆํŽซ ์™ธ์—๋„ ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ๋‚˜ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ํ™œ์šฉํ•˜์—ฌ ๋”์šฑ ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LiBoo

ํŒ€

๊ณตํ†ต

๋ฏผ์ง€

์˜๊ธธ

์ค€์„œ

์ง€์ˆ˜

์ฐฝํ˜„

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

ํšŒ์˜๋ก

๋ฐœํ‘œ

์ผ๊ธฐ์žฅ

Clone this wiki locally