λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Dev-diary/일상

λ¦¬νŒ©ν† λ§ : 4μ£Όμ°¨ ν”Œμ  input μ°½ ν…μŠ€νŠΈ 길이 μ œν•œ

by ciocio 2022. 2. 17.

πŸ“  였늘 κ³ μΉ  문제

βœ” μž₯μ†Œμ— ν•΄λ‹Ήν•˜λŠ” 제λͺ©μ˜ 길이λ₯Ό μ œν•œν–ˆμ§€λ§Œ μ μš©λ˜μ§€ μ•Šμ€ μ—λŸ¬

 

--> 사진을 μ €μž₯ν•  λ•Œ ν•΄λ‹Ή 사진과 μž₯μ†Œλ₯Ό λ¬Άμ–΄ 제λͺ©μ„ μ •ν•  수 있게 μ„€κ³„ν•˜μ˜€λ‹€.

이 제λͺ©μ€ νƒœκ·Έμ˜ λŠλ‚ŒμœΌλ‘œ 짧게 짓도둝 μœ λ„ν•˜κΈ° μœ„ν•΄ ν…μŠ€νŠΈμ˜ 길이λ₯Ό μ œν•œν•΄λ†¨μ—ˆλ‹€.

input νƒœκ·Έμ— max-length 속성을 λ„£μ–΄ 13으둜 μ„€μ •ν–ˆλŠ”λ° 적용이 μ•ˆλ˜λŠ” 문제 λ°œμƒ.

 

--> λΆ„λͺ… μ„€μ • λ‹Ήμ‹œμ— μž‘λ™μ΄ λ˜λŠ” κ±Έ μ•Œκ³  λ„˜μ–΄κ°”λŠ”λ°, 

λ¦¬νŒ©ν† λ§ν•˜λ©΄μ„œ λ³΄λ‹ˆκΉŒ μ•ˆλ˜λ”λΌ πŸ˜‚ 가끔 적용이 μ•ˆλœλ‹€κ³ λŠ” ν•˜λŠ”λ° 흠 ...

μ–Έμ œλ‚˜ λ™μž‘ν•˜κ²Œ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ ν•΄κ²°ν•˜μž !!!

 

😨  BEFORE

 

 

λΆ„λͺ… μ €λŠ” max-length 속성을 넣어놓은 μƒνƒœκ΅¬μš” .. λ™μž‘ μ•ˆν•˜κ΅¬μš” .. γ…Žγ…Ž

μ΄λ ‡κ²Œ 되면 μ‚¬μ΄λ“œλ°”μ— 탭이 좔가될 λ•Œ κΈ€μžκ°€ λ„˜μ³ UIκ°€ λ¬΄λ„ˆμ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

μ‚¬μ΄λ“œλ°” 뿐 μ•„λ‹ˆλΌ λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ ν•΄λ‹Ή 루트λ₯Ό μ‘°νšŒν•  λ•Œλ„ λ¬Έμ œκ°€ 생기고 ^__^

 

πŸ™Œ  ν•΄κ²° 방법

 

ν•΄κ²° 방법을 μ°ΎμœΌλ©΄μ„œ λ§Žμ€ 뢄듀이 input νƒœκ·Έμ— oninput 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 사싀을 μ•Œκ²Œλλ‹€.

λ‚œ onchange 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν–ˆλŠ”λ° ... λ‘˜μ˜ 차이가 뭐지 ?-?

 

oninput : <input>, <select>, <textarea> ν•œμ • μ μš©κ°€λŠ₯ν•œ 이벀트 ν•Έλ“€λŸ¬
onchange : HTML νƒœκ·Έμ˜ λ³€ν™”λ₯Ό κ°μ§€ν•˜λŠ” 이벀트 ν•Έλ“€λŸ¬

πŸ“ oninput vs onchange
• oninput : HTML element value 의 λͺ¨λ“  변화에 λŒ€μ‘ν•΄ λ°œμƒν•œλ‹€.
• onchange : HTML element value 의 λͺ¨λ“  λ³€ν™”λ₯Ό κ°μ§€ν•˜μ§€λ§Œ, λŒ€μ‘ν•˜μ§„ μ•ŠλŠ”λ‹€. (ex. Enterλ₯Ό λˆŒλ €μ„ λ•Œλ§Œ λ°œμƒ)

 

MDN의 μ˜ˆμ‹œλ₯Ό 보면 μ•Œκ² μ§€λ§Œ, oninput λ™μž‘ 방식은 Reactμ—μ„œμ˜ onchange λ™μž‘ 방식과 κ°™λ‹€. (인식 였λ₯˜ 🀨)

onchange 이벀트 ν•Έλ“€λŸ¬μ˜ 본래 νŠΉμ„±μ„ μ•Œμ•˜λ‹€λ©΄ oninput ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν–ˆμ„ν…λ°, 

λ¦¬μ•‘νŠΈμ—μ„œλŠ” μ™œ 문제 없이 λ™μž‘ν•˜λŠ” 걸까 ?


πŸ“ λ¦¬μ•‘νŠΈμ˜ Controlled Componenets

 

" In most cases, we recommend using controlled components to implement forms. "

λ¦¬μ•‘νŠΈλŠ” form을 μ‹€ν–‰μ‹œν‚¬ λ•Œ controlled components λ₯Ό μ‚¬μš©ν•˜κΈΈ κΆŒκ³ ν•œλ‹€.

λ¦¬μ•‘νŠΈμ˜ μƒνƒœ 관리 방식을 μ μš©ν•œ form νƒœκ·Έλ“€μ„ controlled component 라고 λΆ€λ₯Έλ‹€.

--> useRef λ“± DOM을 직접 μ‘°μž‘ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” νƒœκ·ΈλŠ” uncontrolled component 라고 ν•œλ‹€.

 

controlled component 의 λŒ€ν‘œμ μΈ μ’…λ₯˜λ‘œλŠ” input, textarea, select box νƒœκ·Έκ°€ μžˆλ‹€.

λ…νŠΉν•œ 점은 기쑴의 HTMLκ³Ό 달리 λͺ¨λ“  νƒœκ·Έκ°€ value 속성을 가지고 있고,

μ΄λŠ” form νƒœκ·Έμ— μž…λ ₯λ˜λŠ” 정보λ₯Ό λ‹΄λŠ” μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.

그리고 name 속성도 λͺ¨λ“  νƒœκ·Έκ°€ κ°€μ§ˆ 수 있고, νƒœκ·Έλ³„λ‘œ κ΅¬λΆ„ν•˜λŠ” 데 쓰일 수 μžˆλ‹€. πŸ˜‰


λ¦¬μ•‘νŠΈλŠ” μƒνƒœκ°€ λ³€ν•  λ•Œλ§ˆλ‹€ μž¬λ Œλ”λ§μ΄ λ°œμƒν•˜λŠ”λ°, 이 μ λ•Œλ¬Έμ— onchange 이벀트 ν•Έλ“€λŸ¬κ°€ oninput 처럼 λ™μž‘ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€ !-!

 

• HTML μ—μ„œ oninput μ‚¬μš©λ²•

 

<input type="text" maxlength="13" oninput="maxLengthHandler(event)"/>

 

function maxLengthHandler (event) {
  const maxLength = event.max.length;
  // νƒœκ·Έμ˜ max-length 속성보닀 μž…λ ₯된 ν…μŠ€νŠΈμ˜ 길이가 κΈΈλ•Œ
  // slice λ©”μ„œλ“œ μ‚¬μš©ν•΄ μž˜λΌμ€€λ‹€
  if(event.value.length > maxLength){
    event.value = event.value.slice(0, maxLength);
  }
};

 

• REACT μ—μ„œ onchange μ‚¬μš©λ²•

 

function input (){
  const [pinTitle, setPinTitle] = useState(null);

  const handleText = (event: any, maxLength: number) => {
    setPinTitle(event.target.value.substr(0, maxLength));
  };

  return (
    <input onChange={(event) => handleText(event, 13)}/>
  );
};

 

λ‚œ λ‘λ²ˆμ§Έ 인자둜 길이λ₯Ό μ „λ‹¬ν•΄μ£ΌλŠ” 방식을 νƒν–ˆμ§€λ§Œ,

μœ„ λ°©μ‹μ²˜λŸΌ max-length 속성에 μ›ν•˜λŠ” 길이λ₯Ό ν• λ‹Ήν•œ 후에 event κ°μ²΄μ—μ„œ κΊΌλ‚΄ μ“°λŠ” 방식도 쒋은 것 κ°™λ‹€.

slice λŒ€μ‹  substr μ΄λΌλŠ” string 객체에 ν• λ‹Ήλœ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆλ‹€λŠ” 것도 포인트 ! 😊

 

😊  AFTER

 

 

일정 길이 이상 μž…λ ₯λ˜μ§€ μ•ŠλŠ” κ±Έ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ •μƒλ™μž‘ν•©λ‹ˆλ‹€ !

 

🀨  더 μ•Œμ•„ λ³Ό 것

 

ν˜„μž¬λŠ” ν•œκΈ€μ„ κΈ°μ€€μœΌλ‘œ 13으둜 μž‘μ•„λ†¨λ‹€.

μ˜μ–΄λ‚˜ 독일어 λ“± λ‹€λ₯Έ μ–Έμ–΄λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œλ‹€λ©΄ μ œν•œ κΈ€μž 수λ₯Ό λ°”κΏ”μ•Όν•œλ‹€.

μž…λ ₯λ˜λŠ” ν…μŠ€νŠΈμ˜ ꡭ적을 νŒλ³„ν•  방법을 μ°ΎλŠ” 것 ..? 

μ–Έμ–΄λ³„λ‘œ ν…μŠ€νŠΈ μ œν•œ 수λ₯Ό λ‹€λ₯΄κ²Œ 두어 ν™œμš©λ„λ₯Ό 높이면 λ„ˆλ¬΄ 쒋을 것 κ°™λ‹€. !!

 

πŸ“ input ν…μŠ€νŠΈμ˜ 언어별 νŠΉμ§• ꡬ뢄짓기 

λ°˜μ‘ν˜•

λŒ“κΈ€