onKeyDown in Korean(feat. React)
π¦ μ‘λμ¬λ
νλμ ν€μλλ₯Ό μ‘κ³ μ’ νΈνκ² μ 리νκ³ μΆμ΄ λ§λ μ‘λμ¬λ
μ‘λμ¬λλ μ‘°μ νκΈ° νμ
μμ 볡
μ΄ νΈμ°¬νμ‘λμ°μ΄(ιεζ£η°)
μμ μ λλ λ§μ΄λ€.
μ‘λμ°μ΄λμ‘κΈ°(ιθ¨)
μ ννλ₯Ό λΉλ €μ¨ μ± μΌλ‘ ꡬ체μ μΈ μ²΄κ³κ° μ‘νμμ§ μμ νμμ΄λ€.
νλͺ©μ΄ λ€μ λμ‘νκ³ λ΄μ©μ ꡬλΆμ΄ νΌλλμ΄μλ€κ³ νλ€. π€£
ποΈ onKeyDown in Korean
리μ‘νΈμμ onKeyDown μ΄λ²€νΈλ₯Ό μ¬μ©νλ€κ° νκΈ μ
λ ₯ μ μ΄λ²€νΈκ° λλ² λ°μνλ λ¬Έμ κ° μμλ€.
λ¨Όμ μ½λλ μλμ κ°λ€.
// μλΆλΆμ μλ΅...
return (
<div className={styles['input-item']}>
<input
type="text"
placeholder="ν μΌμ μ
λ ₯ν΄μ£ΌμΈμ."
value={inputText}
onChange={handleInput}
onKeyDown={(e) => {
console.log(e);
// λ¬Έμ κ° λλ κ³³μ μ¬κΈ°λ€.
if (e.key === 'Enter') {
handleAdd();
(inputRef.current as HTMLInputElement).focus();
}
}}
ref={inputRef}
/>
<button
onClick={() => {
handleAdd();
(inputRef.current as HTMLInputElement).focus();
}}
>
Add
</button>
</div>
);
μ μ²λΌ onKeyDown
μ΄λ²€νΈκ° λ°μνμ λ, μ΄λ²€νΈ(e)μ keyκ°μ΄ Enter
μΈ κ²½μ°μλ§ handleAdd
ν¨μλ₯Ό μ€ννλλ‘ νλ€.
κ·Έλ°λ° λ¬Έμ λ νκΈμ μ κ³ Enter
λ₯Ό μ
λ ₯νλ©΄ νκΈ νλ², κ·Έ νκΈμ λ κΈμ νλκ° λ μ
λ ₯λλ κ²μ΄μλ€.
ν΄μ μμ κ°μ΄ μ΄λ²€νΈλ₯Ό μ½μλ‘ μ°μ΄λ³΄μλ€.
μλλ γ
λ§ μ
λ ₯ ν, Enter
λ₯Ό λλ μ λμ μ½μμ΄λ€.
λΆλͺ
γ
κ³Ό Enter
λ§ νλλ°, event κ°μ²΄λ 3κ°κ° μ°νμλ€. 3κ°μ κ°μ²΄λ₯Ό μ’λ μμΈν μ΄ν΄λ³΄μ.
μμλλ‘ κ°μ²΄μ μ΄λ―Έμ§λ₯Ό λμ΄νλ©΄
-
γ -229
-
Enter-229
-
Enter-13
λκ° μ΄μνλ€. 첫λ²μ§Έ γ
κ³Ό λλ²μ§Έ Enter
κ° λΆλͺ
ν λ€λ₯Έ ν€μΈλ° μ κ°μ keyCode κ°μ κ°λκ±ΈκΉ?
μ΄λ₯Ό μκΈ° μν΄μλ IME KeyCode 229 Issue(feat. Chrome + νκΈ)λ₯Ό μ°Έκ³ νμ.
μ λ§ κ°λ¨νκ² μ€λͺ
νλ©΄ νκΈκ³Ό κ°μ΄ λ¬Έμλ€μ μ‘°ν©μΌλ‘ μλ‘μ΄ λ¬Έμκ° λλ μΈμ΄μ κ²½μ°μλ keyλ₯Ό μ
λ ₯ μμ, λΈλΌμ°μ μ IME(Input Method Editor)κ° μ
λ ₯μ λ°κ³
isComposing = true
μνκ° λλ€. μ¦, μμ§ λ¬Έμλ₯Ό μ‘°ν©νκ³ μλ μ€
μ΄λΌλ μλ―Έμ΄λ€. μ΄ λ¨κ³μμλ λͺ¨λ key κ°μ΄ 229
λ‘ λμ€κ² λλ€.
κ²°κ΅ λ§μ§λ§ Enter
λ₯Ό μ
λ ₯ μ, isComposing
μ΄ trueμΈ μ΄λ²€νΈ, falseμΈ μ΄λ²€νΈκ° 2λ² λ°μνλ κ²μ΄λ€.
κ·Έλ λ€λ©΄ μ΄μ ν΄κ²°μ±
μ κ°λ¨ν΄λ³΄μΈλ€! if 쑰건문μΌλ‘ keyCode νΉμ which κ°μ΄ 229μΈ κ²½μ° early return
μν€λ©΄ λλ€.
μ΄λ κ² ν΄κ²°μ λμ§λ§, κ²½κ³ κ° νλ λ±μ₯νλ€. λ°λ‘ keyCodeμ whichλ 곧 deprecated λ μμ μ΄λΌλ κ²½κ³ μ΄λ€.
κ·Έλ λ€λ©΄ λ§μ§λ§ λ¨μ μλ¨μ΄ μλ€. λ°λ‘ e.isComposing
μ μ¬μ©νλ κ²μ΄λ€. κ·Έλ°λ° λ νλ μ£Όμν μ μ, 리μ‘νΈ onKeyDown
μ΄λ²€νΈλ νλ² κ°μΈμ§ μνμ΄κΈ° λλ¬Έμ
e.nativeEvent.isComposing
μ ν΅ν΄ μ κ·Όνλ©΄ λλ€.
μλλ ν΄κ²°ν μμ μ½λμ΄λ€.
return (
<div className={styles['input-item']}>
<input
type="text"
placeholder="ν μΌμ μ
λ ₯ν΄μ£ΌμΈμ."
value={inputText}
onChange={handleInput}
onKeyDown={(e) => {
// μλμ κ°μ΄ isComposingμ΄ trueμΈ κ²½μ°λ early return μν¨λ€.
if (e.nativeEvent.isComposing) return;
if (e.key === 'Enter') {
handleAdd();
(inputRef.current as HTMLInputElement).focus();
}
}}
ref={inputRef}
/>
<button
onClick={() => {
handleAdd();
(inputRef.current as HTMLInputElement).focus();
}}
>
Add
</button>
</div>
);