๐Ÿšจ PropTypes์—์„œ JSDoc์œผ๋กœ — React 19 ํƒ€์ž… ๊ด€๋ฆฌ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

2025. 10. 19. 17:13ยท๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ๋ฐ ํ™œ๋™/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… + ๋ฆฌํŒฉํ† ๋ง

๐Ÿ”— ํ”„๋กœ์ ํŠธ - ๋กค๋ง

๋”๋ณด๊ธฐ

1. ๐Ÿšจ Tailwind + cva + clsx + twMerge ์กฐํ•ฉ์—์„œ ์ปค์Šคํ…€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ

2. ๐Ÿšจ PropTypes์—์„œ JSDoc์œผ๋กœ — React 19 ํƒ€์ž… ๊ด€๋ฆฌ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

3. ๐Ÿšจ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ — ์ด๋ชจ์ง€ ๋ฐ˜์‘ UI ๋ฏธ๋ฐ˜์˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

4. [์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ FE 19๊ธฐ] ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ - ๋กค๋ง ํšŒ๊ณ 


1๏ธโƒฃ ๋ฌธ์ œ ์ƒํ™ฉ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—ฌ์„œ

์ปดํฌ๋„ŒํŠธ์˜ props ํƒ€์ž…์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์—์„œ PropTypes๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

import PropTypes from 'prop-types';

const Button = ({ label, onClick }) => {
  return <button onClick={onClick}>{label}</button>;
};

Button.propTypes = {
  label: PropTypes.string.isRequired, // ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•˜๊ณ  ํ•„์ˆ˜
  onClick: PropTypes.func,            // ํ•จ์ˆ˜
};

export default Button;

PropTypes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(dev)์—์„œ ํƒ€์ž… ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,

์ž˜๋ชป๋œ props๊ฐ€ ์ „๋‹ฌ๋  ๊ฒฝ์šฐ ์ฝ˜์†”์— ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์ผ์ • ์ˆ˜์ค€์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ฑ™๊ธธ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

๋„ˆ๋ฌด๋‚˜๋„ ๊นจ๋—ํ•œ ์ฝ˜์†”์ฐฝ.....

๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ,

์ž˜๋ชป๋œ props๋ฅผ ์ „๋‹ฌํ•ด๋„ ์ฝ˜์†”์— ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค.

 

2๏ธโƒฃ ์›์ธ ๋ถ„์„

์ฒ˜์Œ์—๋Š” PropTypes ์„ค์ •์ด ์ž˜๋ชป๋˜์—ˆ๋‚˜ ์‹ถ์–ด ํŒจํ‚ค์ง€๋ฅผ ์žฌ์„ค์น˜ํ•ด๋ณด๊ณ ,

ESLint ์„ค์ •์„ ์ˆ˜์ •ํ•ด๋ณด๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜์˜€๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด๋„ ์•ˆ๋˜๊ณ , ์ €๋ ‡๊ฒŒ ํ•ด๋„ ์•ˆ๋˜๊ธธ๋ž˜ ์„ค๋งˆ..?ํ•˜๋ฉด์„œ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ดค๋‹ค.

๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ,

React 19๋ถ€ํ„ฐ๋Š” PropTypes๊ฐ€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. (๊ฑฐ์ง“๋ง์ด๋ผ ํ•ด์ค˜...)

 

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด React 18 ํ™˜๊ฒฝ์„ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋‹ˆ

์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.......๐Ÿคฆ‍โ™€๏ธ

 

3๏ธโƒฃ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

React 19์—์„œ๋Š” PropTypes๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—

์ฐจ์„ ์ฑ…์œผ๋กœ JSDoc ์ฃผ์„์„ ์‚ฌ์šฉํ•œ props ํƒ€์ž… ์ •์˜ ๋ฐฉ์‹์„ ์„ ํƒํ•˜์˜€๋‹ค.

/**
 * @param {Object} props
 * @param {string} props.label - ๋ฒ„ํŠผ์— ํ‘œ์‹œํ•  ํ…์ŠคํŠธ
 * @param {() => void} [props.onClick] - ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
 */
const Button = ({ label, onClick }) => {
  return <button onClick={onClick}>{label}</button>;
};

JSDoc์„ ์ž‘์„ฑํ•˜๋ฉด VScode์—์„œ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ง€์›๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์„œ ํŽธ๋ฆฌํ–ˆ๊ณ ,

ํŒ€์›์ด ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ์—๋„ ๋„์›€๋˜์—ˆ๋‹ค.

 

๋‹ค๋งŒ JSDoc์€ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ฃผ์ง„ ์•Š์•„์„œ

PropTypes์ฒ˜๋Ÿผ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค.

 

๋”ฐ๋ผ์„œ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด

๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” TypeScript๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

4๏ธโƒฃ ์ •๋ฆฌ

  • React 19๋ถ€ํ„ฐ๋Š” prop-types๊ฐ€ ์ž๋™์œผ๋กœ ๋ฌด์‹œ๋˜์–ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • PropTypes๋ฅผ ์ž˜ ์ ์šฉํ–ˆ๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฆฌ์•กํŠธ ๋ฒ„์ „์„ ํ™•์ธํ•ด๋ณด์ž
    • ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ž์ฃผ ํ™•์ธํ•˜์ž...๐Ÿฅฒ
  • Prop Types๋ฅผ ์ด์šฉํ•œ ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ React 18 ์ดํ•˜ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • React 19์—์„œ๋Š” JSDoc์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜, ์žฅ๊ธฐ์ ์œผ๋กœ TypeScript๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๋‹ค.

 

728x90
'๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ๋ฐ ํ™œ๋™/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… + ๋ฆฌํŒฉํ† ๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๐Ÿšจ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ — ์ด๋ชจ์ง€ ๋ฐ˜์‘ UI ๋ฏธ๋ฐ˜์˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ๐Ÿšจ Tailwind + cva + clsx + twMerge ์กฐํ•ฉ์—์„œ ์ปค์Šคํ…€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ
_์ด์•Ž
_์ด์•Ž
๊ณต๋ถ€ ๊ธฐ๋ก ๋ธ”๋กœ๊ทธ
  • _์ด์•Ž
    ๊ณต๋ถ€
    _์ด์•Ž
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • โœ๏ธ ๋ชจ๋“  ๊ธ€ (79)
      • ๐Ÿ“š ํ”„๋ก ํŠธ์—”๋“œ (48)
        • Web (6)
        • React (11)
        • Next.js (2)
        • JavaScript (13)
        • TypeScript (2)
        • Dev Setup (1)
        • git+github (4)
        • HTML+CSS (9)
      • ๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ๋ฐ ํ™œ๋™ (24)
        • ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ 19๊ธฐ (19)
        • ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ (2)
        • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… + ๋ฆฌํŒฉํ† ๋ง (3)
      • ๐Ÿ“ ์ž๋ฃŒ ์ •๋ฆฌ (3)
        • React ๊ณต์‹๋ฌธ์„œ (3)
      • โš™๏ธ etc. (4)
  • ๋งํฌ

    • ๐Ÿ‘‹ GitHub
    • ๐Ÿ“ GitHub/Study
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ธฐ๋ก
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
_์ด์•Ž
๐Ÿšจ PropTypes์—์„œ JSDoc์œผ๋กœ — React 19 ํƒ€์ž… ๊ด€๋ฆฌ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”