π μ€λ κ³ μΉ λ¬Έμ
β μ₯μμ ν΄λΉνλ μ λͺ©μ κΈΈμ΄λ₯Ό μ ννμ§λ§ μ μ©λμ§ μμ μλ¬
--> μ¬μ§μ μ μ₯ν λ ν΄λΉ μ¬μ§κ³Ό μ₯μλ₯Ό λ¬Άμ΄ μ λͺ©μ μ ν μ μκ² μ€κ³νμλ€.
μ΄ μ λͺ©μ νκ·Έμ λλμΌλ‘ μ§§κ² μ§λλ‘ μ λνκΈ° μν΄ ν μ€νΈμ κΈΈμ΄λ₯Ό μ νν΄λ¨μλ€.
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 ν μ€νΈμ μΈμ΄λ³ νΉμ§ ꡬλΆμ§κΈ°
'Dev-diary > μΌμ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κΈ°λ₯μΆκ° : 4μ£Όμ°¨ νμ λ©μΈνμ΄μ§ μ λλ©μ΄μ ꡬν (1) (0) | 2022.02.26 |
---|---|
리ν©ν λ§ : 4μ£Όμ°¨ νμ λ§μ»€ μ 보창 css λ³κ²½ (0) | 2022.02.21 |
리ν©ν λ§ : 4μ£Όμ°¨ νμ kakao Map API λ§μ»€ μν κ΄λ¦¬ (1) (0) | 2022.02.16 |
Github profile κΎΈλ―ΈκΈ° & μ 리 ing (0) | 2022.02.11 |
νλ‘μ νΈ μκΈ° κΈ°λ‘μ μ 리νλ©°. (0) | 2022.02.10 |
λκΈ