[FE] 맥북에서 키워드 마지막 글자 입력되는 오류 해결(#774) #776
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📓 스토리북 링크
바로가기
📌 관련 이슈
✨ PR 세부 내용
❗ 맥북 사용자는 local+chrome 환경에서 꼭 확인해주세요!
🔥 원인
KeyboardEvent.isComposing
은 입력한 문자가 조합문자인지 아닌지를 판단합니다. 한글은 자음과 모음의 조합으로 한 음절이 만들어지기 때문에 조합문자이고, 영어는 조합문자가 아닙니다.한글을 입력할 때 자세히 보면 입력 중인 글자 바로 아래에 검은 밑줄이 생기는 경우가 있는데, 이 밑줄이 보이는 상황에서
![image](https://private-user-images.githubusercontent.com/63334368/387117769-312f896b-2f97-49ed-80f5-e8ade2912fe3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNTc3MDksIm5iZiI6MTczOTI1NzQwOSwicGF0aCI6Ii82MzMzNDM2OC8zODcxMTc3NjktMzEyZjg5NmItMmY5Ny00OWVkLTgwZjUtZThhZGUyOTEyZmUzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDA3MDMyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZmMjQ2ZjAyYjhmYWI4NzcwZGJlYmM1NDQ0Yzk0ODIyMzcyNmNhMGY3MDYyMmI1NDU5OTBmMTQ0NGQ1NDVjZmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4mbAB8BjjBPgkVMeMuAHHg5Au9LK94SgIve-yjOYe04)
Enter
키를 입력하면 이벤트가 2번 발생하는 이슈가 있습니다. onKeyDown 이벤트를 걸었을 때 우리가 키를 누르고 떼는 순간까지의 시간 동안에 이벤트가 발생하고 진행되는데, 그 시간 동안에 음절이 완성되면 다시 이벤트가 호출될 수 있기 때문입니다.🔥 해결 방법
영어는 onKeyDown 이벤트가 한 번 발생하고 조합 글자가 아니기 때문에 항상 isComposing 값이 false입니다.
![image](https://private-user-images.githubusercontent.com/63334368/387118573-b616a893-d2d2-4f6c-9cf7-e050a6f23959.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNTc3MDksIm5iZiI6MTczOTI1NzQwOSwicGF0aCI6Ii82MzMzNDM2OC8zODcxMTg1NzMtYjYxNmE4OTMtZDJkMi00ZjZjLTljZjctZTA1MGE2ZjIzOTU5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDA3MDMyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTExMjZjMWQxZGFiMTU0MDQ3M2YwMTAwMzlmNGUxZDYxZWYwZDlmYmI4NWQwZTMzNGU3MmViNTY3YmUyM2VmYTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.eiwvUvkhxd2XYN_ZTuUHBhmFsHpvOzsCN7P2ee0NpPs)
한글은 조합 중인 글자, 즉 밑줄이 있는 글자를 탈출할 때 이벤트가 두 번 발생합니다. 음절이 완성되었기 때문인데요. 방향키, ESC, Space Bar, Enter 키 등을 눌렀을 때를 말합니다.
![image](https://private-user-images.githubusercontent.com/63334368/387118626-fbd0468a-0dfd-443e-927b-27feee17fc38.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNTc3MDksIm5iZiI6MTczOTI1NzQwOSwicGF0aCI6Ii82MzMzNDM2OC8zODcxMTg2MjYtZmJkMDQ2OGEtMGRmZC00NDNlLTkyN2ItMjdmZWVlMTdmYzM4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDA3MDMyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ1ZjljYjEzZmViMjFlNmFhNzllODIxZjNjNDU2OTJlZTk0NjEzNjc4N2VjMDRmNTY3ZmYyNGZlOTIyNjM2ZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.m96vDJn-k7C3BpkRjR3J78qBV1dQBEZNsXaFGDu2t4M)
처음 이벤트에서는 조합 글자였기 때문에 isComposing 값이 true이고, 위 키들 때문에 음절이 완성되어 발생한 두 번째 이벤트에서는 조합을 탈출했기 때문에 isComposing 값이 false로 바뀝니다.
이것을 활용하여 isComposing이 false일 때만 키워드를 배열에 추가하면 됩니다. 따라서 코드를 아래와 같이 수정하였습니다.