onKeyDown ์ด๋ฒคํŠธ ํ•œ๊ธ€ ์—๋Ÿฌ

์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ์ฑ„ํŒ…์„ ๋ณด๋‚ด๋ฉด ์ฑ„ํŒ…์˜ ๋ ์Œ์ ˆ์ด ํ•œ๋ฒˆ ๋” ์ „์†ก๋ผ ์ฑ„ํŒ…์ด ๋‘ ๋ฒˆ์”ฉ ์ „์†ก๋˜๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ฑ„ํŒ… ๋ถ€๋ถ„ ์—๋Ÿฌ

์˜์–ด์™€ ์ˆซ์ž, ํŠน์ˆ˜๊ธฐํ˜ธ ๋“ฑ์„ ๋ณด๋‚ด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ „์†ก๋์ง€๋งŒ, ์œ ๋… ํ•œ๊ธ€๋งŒ ์ „์†กํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ, onKeyDown ๋ฌธ์ œ์˜€๋‹ค.
onKeyPress๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ๋œ๋‹ค๋Š”๋ฐ, onKeyPress๋Š” ์ด๋ฏธ deprecated๋œ ์ƒํƒœ๋ผ ์“ฐ๊ธฐ๊ฐ€ ์‹ซ์—ˆ๋‹ค.
์ข€ ๋” ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜๋‹ค.

component
index.d.ts

์˜์–ด, ์ˆซ์ž, ํŠน์ˆ˜๊ธฐํ˜ธ๋Š” ๊ธ€์ž ์กฐํ•ฉ์ด ์•ˆ ๋˜๋Š” ๋ฐ˜๋ฉด ํ•œ๊ธ€์€ ์กฐํ•ฉ ๋ฌธ์ž์ด๊ธฐ์— ๋ฐœ์ƒ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์ธํ’‹ ์ฐฝ์— ํ•œ๊ธ€๋กœ onChange๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์„๋•Œ, ๊ธ€์ž๊ฐ€ ์กฐํ•ฉ ์ค‘์ธ์ง€ ์กฐํ•ฉ์ด ๋๋‚œ ์ƒํƒœ์ธ์ง€ ์ปดํ“จํ„ฐ๊ฐ€ ํŒŒ์•…์ด ์•ˆ๋ผ ์ด๋ฒคํŠธ๊ฐ€ ๋‘ ๋ฒˆ์”ฉ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

mdn ์„ค๋ช…์— ๋”ฐ๋ฅด๋ฉด KeyboardEvent.isComposing์€ ์„ธ์…˜ ๋‚ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” boolean๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฐ‘์— mdn ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๊ธ€์ž๋ฅผ ์น ๋•Œ compositionstart ๋˜์—ˆ๋‹ค๊ฐ€, 'ํ•˜' ๊ธ€์ž ์ž…๋ ฅ์ด ๋๋‚˜๊ณ  ๋‹ค์Œ ๊ธ€์ž์ธ '์ด'๋กœ ๋„˜์–ด๊ฐ€์ž compositionend๊ฐ€ ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋‹ค์Œ '์ด' ๊ธ€์ž๋Š” ๊ธ€์ž ๋ฐ‘์— ๊ฒ€์€ ์ค„์ด ์ณ์ ธ์žˆ๊ณ , compositionupdate๊ฐ€ ์ง„ํ–‰์ค‘์ด๋‹ค. ์ฆ‰ ์•„์ง ์ปดํ“จํ„ฐ๋Š” ๊ธ€์ž ์กฐํ•ฉ์ด ๋๋‚ฌ๋Š”์ง€ ์•„๋‹Œ์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ์ƒํƒœ๋‹ค.

mdn ์˜ˆ์‹œ

๊ทธ๋Ÿผ ๋ฌธ์ œ์˜ ์—๋Ÿฌ ๋ถ€๋ถ„ ์ฝ˜์†”์„ ๋ณด์ž.

ํ•ด๋‹น ์ฝ˜์†”์—๋Š” e.native.isComposing์˜ boolean๊ฐ’์ด ์ฐํžˆ๊ณ  ์žˆ๋‹ค.

'ใ…Ž'๋งŒ ์ณค์„๋•Œ false ๊ฐ’์ด ์ฐํžˆ๊ณ , ์ดํ›„ ๊ธ€์ž๋ฅผ ์กฐํ•ฉํ•˜์ž ์ง€์†์ ์œผ๋กœ true ๊ฐ’์ด ์ฐํžŒ๋‹ค. ์—ญ์‹œ ์—ฌ๊ธฐ์„œ๋„ ๊ฒ€์€ ์ค„์ด ๋‚˜์žˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ ์—”ํ„ฐ๋ฅผ ์ณ์„œ ์ฑ„ํŒ…์„ ๋ณด๋‚ด๋ฉด ์ฝ˜์†”์— true ๊ฐ’, false ๊ฐ’์ด ๊ฐ๊ฐ ์ฐํžŒ๋‹ค. ์ฆ‰ ์ด๋ฒคํŠธ๊ฐ€ ๋‘ ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
true๊ฐ’์—์„œ๋Š” ์ฑ„ํŒ…์˜ ๋ ์Œ์ ˆ๋งŒ ์ „์†ก๋๊ณ , false์ผ ๋•Œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ฑ„ํŒ…์ด ์ „์†ก๋๋‹ค.

์Šฌ๋ž™ ์ฑ„ํŒ… ํ™”๋ฉด

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ e.nativeEvent.isComposing์ด false์ผ ๊ฒฝ์šฐ๋งŒ์˜ ์กฐ๊ฑด์„ ๋‹ค๋‹ˆ ์ฑ„ํŒ…์„ ๋ณด๋‚ธ ๋’ค false๊ฐ’๋งŒ ๋‚˜์˜ค๋ฉด์„œ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ํ•œ๋ฒˆ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค.

hook
์กฐ๊ฑด ์ถ”๊ฐ€ ์ „
์กฐ๊ฑด ์ถ”๊ฐ€ ํ›„

References

 

KeyboardEvent.isComposing - Web APIs | MDN

The KeyboardEvent.isComposing read-only property returns a boolean value indicating if the event is fired within a composition session, i.e. after compositionstart and before compositionend.

developer.mozilla.org

 

Element: compositionstart event - Web APIs | MDN

The compositionstart event is fired when a text composition system such as an input method editor starts a new composition session.

developer.mozilla.org

๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!