๐Ÿ˜† My name is Ez : ์‰ฝ๋‹ค ์‰ฌ์›Œ ๊ฐœ๋ฐœlife

[ETC] : ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ? ์•„? ๋ณธ๋ฌธ

โŒจ๏ธ Web Front-End/ETC

[ETC] : ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ? ์•„?

์ด์ง€ํ‚˜ 2023. 8. 4. 10:00

 

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์•„ํ†ฐํ˜•์‹์˜ ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ ๊ฐ™์€ ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ๋ฅผ ๋จผ์ € ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด๊ณ  ๋ฆฌ๋ทฐํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์˜ค๋Š˜๊นŒ์ง€ ์ž‘์—…์€ ํ–ˆ๊ณ  ๋‚ด์ผ ๊ฐ™์ด ๋ชจ์—ฌ์„œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ์•„์ฃผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Input์„ ๋จผ์ € ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ, InputBasic์ด๋ผ๊ณ  ์ •ํ–ˆ๋‹ค.

๋‹จ์ˆœ ํ…์ŠคํŠธ๋ฟ ์•„๋‹ˆ๋ผ , ์ˆซ์ž, ์Œ์ˆ˜, ์†Œ์ˆ˜์ , ๊ณ„์ขŒ๋ฒˆํ˜ธ, ์˜จ๋„, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ.. ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ์ปจํŠธ๋กคํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ธํ’‹ ๋‚ด๋ถ€ ๋ผ๋ฒจ(๋‹จ์œ„ ํ‘œ๊ธฐ), ๊ฒ€์ƒ‰์ฐฝ์˜ ๋‹๋ณด๊ธฐ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค.

์ผ๋‹จ CSS ๊ด€๋ จ๋œ ๋ถ€๋ถ„์€ ํผ๋ธ”๋ฆฌ์‹ฑ์ด ๋‚˜์˜ค๋ฉด ์ ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์œ„์น˜๋ฅผ ๋จผ์ € ์žก์•˜๋‹ค. 

Prop๋กœ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ value, setValue, className, kind, disabled, maxLength... ์—ฌ๋Ÿฌ Props๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๊ณ ,

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด kind์†์„ฑ์ด๋‹ค. ์ด๊ฒƒ์— ๋”ฐ๋ผ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋‚˜, format์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

 

์‚ฌ์‹ค ์˜ค๋Š˜ ๋งํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์€ ์•„๋žซ๋ถ€๋ถ„์ด๋‹ค.

โฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธ

 

๐Ÿ“Œ ์ด๋ฒˆ์— ๋งŒ๋“ค๋ฉด์„œ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ ๊ฑด ์ œ์ž‘์€ ํ˜ผ์ž ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค...

 

๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•œ ๊ฑด kind์™€ ๊ฐ™์€ props์— ์ง์ ‘ Type์„ ์„ค์ •ํ•ด์„œ ์–ด๋–ค ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

 

"Type Alias"๋Š” TypeScript์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.  ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ํƒ€์ž…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด์˜ ํƒ€์ž…๋“ค์„ ์กฐํ•ฉํ•ด์„œ ๋” ๋ณต์žกํ•œ ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.  (์•„๋ž˜ ์ฝ”๋“œ ์ฐธ๊ณ )

 

export type InputKind =
  | 'normal'
  | 'number'
  | 'day'
  | 'minute'
  | 'accout'
  | 'decimal'
  | 'minusDecimal'
  | 'phone'
  | 'emailId'
  | 'emailDomain';

 

type InputKind์—์„œ ์ง€์ •ํ•œ ํƒ€์ž…๋งŒ ๋ชฉ๋กํ˜•์‹์œผ๋กœ ํ™•์ธ๊ฐ€๋Šฅ

์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ดํ›„ Props Interface ์„ค์ • ์‹œ kind์— InputKind๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ดํ›„์— InputBasic์— kind์— ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ ๋ชฉ๋ก์„ ๋‚˜์™€์„œ ๋ณด๊ธฐ ํŽธํ•˜๊ณ , ์ง€์ •๋œ ๊ฐ’ ์ด์™ธ์—๋Š” ์—๋Ÿฌ๋ฅผ ํ‘œ๊ธฐํ•ด์„œ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  InputBasic์—์„œ ์‚ฌ์šฉ๋˜๋Š” Props ์„ค๋ช… ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ์ดํ›„ ์ปดํฌ๋„ŒํŠธ๋ฅผ import ํ•˜๊ณ  ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ Props์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์™€์„œ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ž‘์„ฑ์ด์ง€๋งŒ ์ฒ˜์Œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

(์ด์ „๋ถ€ํ„ฐ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์™œ ํ•˜์ง€ ์•Š์•˜๋Š”๊ฐ€... ๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ)

 

"JSDoc" ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ฝ”๋“œ์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•๊ณผ ์˜๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. (์•„๋ž˜ ์ฝ”๋“œ ์ฐธ๊ณ )
/**
 * @param {string} value  - value
 * @param {React.Dispatch<React.SetStateAction<string>>} setValue - setValue
 * @param {string} kind - input์— ์ž…๋ ฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” value ์ข…๋ฅ˜ (InputKind)
 * @param {string} className - className ์ถ”๊ฐ€
 * @param {boolean} search - ๊ฒ€์ƒ‰์•„์ด์ฝ˜ ์œ ๋ฌด
 * @param {string} placeholder -placeHoder ๋ฌธ๊ตฌ ์ถ”๊ฐ€
 * @param {string} leftLabel - ์ขŒ์ธก์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถ”๊ฐ€
 * @param {string} rigthLabel - ์šฐ์ธก์•ˆ๋‚ด(๋‹จ์œ„) ๋ฌธ๊ตฌ์ถ”๊ฐ€
 * @param  {boolean} disabled - disabled ์—ฌ๋ถ€
 * @param {boolean} readOnly - readOnly ์—ฌ๋ถ€
 * @param {number} maxLength - ๊ธธ์ด์ œํ•œ (ํ•œ๊ธ€์€ ์ œํ•œ * 2 ๊ฐ’์œผ๋กœ ์ž…๋ ฅ)
 * @param {funtion} onPressEnter - Enter key ์ž…๋ ฅ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ถ”๊ฐ€
 * @returns void
 */

 

์ปดํฌ๋„ŒํŠธ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์ž‘์„ฑํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜ด

 

์ด์ „์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ํ•จ์ˆ˜๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•„๋ฌด ์„ค๋ช…์ด๋‚˜ ์ฃผ์„์ด ์—†์–ด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„์„ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ์†Œ์š”๋ผ์„œ ๊ฐœ๋ฐœ์—…๋ฌด์— ์ง€์—ฐ์„ ์ผ์œผ์ผฐ๋‹ค....๐Ÿ˜ฅ 

 

๊ฐ™์ด ์ผํ•˜๋Š” ์ง์žฅ๋™๋ฃŒ(๋ธ”๋กœ๊ทธ๋ฅผ ๊ฐ™์ด ์“ฐ๊ธฐ๋กœ ํ•œ ใ…‹ใ…‹ ) ์—๊ฒŒ ์˜ค๋Š˜ ๋ณด์—ฌ์คฌ๋”๋‹ˆ ๊ต‰์žฅํžˆ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ ๋งค์šฐ ๊ธฐ๋ถ„์ด ์ข‹์•˜๊ณ , ์‹œ๋‹ˆ์–ด ๋ถ„์—๊ฒŒ๋„ ๊ฐœ๋ฐœ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ๋“œ๋ฆฌ๋ฉด์„œ  ์˜ค๋Š˜ ์ž‘์„ฑํ•œ type์ด๋‚˜ ์ด๋Ÿฐ param์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ ์€ ๊ฒƒ์„ ๋ณด์—ฌ๋“œ๋ฆฌ๋‹ˆ ๋งค์šฐ ์ข‹์•„ํ•˜์…จ๊ณ  ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•ด์ฃผ์…”์„œ ๋งŒ์กฑํ–ˆ๋‹ค. 

 

๋‹ค์‹œ ํ•˜๋‚˜์”ฉ ์‹œ์ž‘ํ•˜๋‹ˆ๊น ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค!