[keyDown, keyUp Event] ํ๊ตญ์ด ์ ๋ ฅ ๋ฌธ์ ํด๊ฒฐ : e.nativeEvent.isComposing
keyDown/keyUp ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ๋, ์์ด๋ ๊ด์ฐฎ์ง๋ง ํ๊ตญ์ด๋ก ์ ๋ ฅํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๐ค Why?
์ด ๋ฌธ์ ๋ ํ๊ธ์ ์กฐํฉํ ์ ๋ ฅ ๋ฐฉ์ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. ํ๊ธ ์ ๋ ฅ์ ์ฌ๋ฌ ํค ์ ๋ ฅ์ด ์กฐํฉ๋์ด ํ๋์ ๊ธ์๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์, key Event๊ฐ ๋ฐ์ํ๋ ์์ ์๋ ์ ๋ ฅ์ด ์์ ํ ์์ฑ๋์ง ์์ ์ ์๋ค๊ณ ํ๋ค.
e.nativeEvent.isComposing
์ด ์์ฑ์ ์ฌ์ฉ์๊ฐ ํ ์คํธ ์ ๋ ฅ ์ค์ ๋ฌธ์ ์กฐํฉ(์: ํ๊ธ ์์๊ณผ ๋ชจ์ ์กฐํฉ)์ด ์งํ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ ๋ ฅ์ด ์์ฑ๋ ์ํ์ธ์ง๋ฅผ ํ์ธํ์ฌ, ์ ๋ ฅ์ ์์ฑ์ด ๋ ๊ฒฝ์ฐ์๋ง ๊ฒ์์ฒ๋ฆฌ๋ฅผ ์คํํ๋๋ก ํ๋ค.
const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {
if (isVisible && e.key === "Enter" && !e.nativeEvent.isComposing) {
handleSearch();
}
};
isComposing์ด false์ฌ์ผ ์ ๋ ฅ์ด ์๋ฃ๋์์์ ๋ํ๋ด๋ฏ๋ก, !e.nativeEvent.isComposing ์กฐ๊ฑด์ ์ถ๊ฐํด์ฃผ๋ฉด ํด๊ฒฐ๊ฐ๋ฅํ๋ค.