채팅 입력시 끝 단어 2번 입력되는 현상을 발견.
2024. 1. 31. 09:00ㆍ개발
윈도우 환경에서는 채팅을 할 시 끝 단어가 2번 반복되는 현상이 없었는데
맥 환경에서는 채팅을 할 시 끝 단어가 간헐적으로 2번 반복되는 현상이 나타났다.
// 메시지 전송 핸들러
const KeyPresshandler = async (event: React.KeyboardEvent<HTMLInputElement>) => {
if (event.key === 'Enter' && inputValue.trim()) {
if (event.nativeEvent.isComposing === false) {
event.preventDefault(); // 폼 제출 방지
sendDirectMessage({
content: inputValue,
author_id: LoginPersonal,
chat_id: chatId,
item_id: productId,
// others_id: otherLoginPersonal,
});
setInputValue('');
}
}
};
//dm메시지 전송
const sendDmMessage = async () => {
if (!inputValue.trim()) return; // 메시지가 비어있지 않은지 확인
sendDirectMessage({
content: inputValue,
author_id: LoginPersonal,
chat_id: chatId,
item_id: productId,
// others_id: otherLoginPersonal,
});
setInputValue('');
};
// 메시지 전송 핸들러 라고 적힌 부분이 위의 이미지에서 입력창에 엔터를 치면 들어가는 코드이고
//dm메시지 전송 라고 적힌 부분이 위의 이미지에서 전송을 눌러야 들어가는 코드이다.
아래에는 JSX 부분에서 실행 할때 코드 인데,
<St.ChatModalFooter>
<St.InputField
value={inputValue}
onChange={InputChanger}
onKeyDown={KeyPresshandler}
placeholder="메세지를 입력해주세요"
/>
<St.SendButton onClick={sendDmMessage}>전송</St.SendButton>
</St.ChatModalFooter>
위의 두 코드는 거의 동일하지만 재밌게도 엔터를 눌러서 입력을 하면 끝단어가 2번 보내지고, 전송을 눌러서 보내면 괜찮다고 한다.
원인을 파악하던중 onKeyDown 이라는 이벤트가 발생 할때 문제가 된다는 걸 알았다.
isCompoising(현재 값이 입력이 완료된 상태(false)/진행중인 상태(true))라는 속성과 한글입력방식이
밀접하게 연관이 있었다
영어의 경우 apple이라고 입력하면 완성된 상태 isCompoising (false) 로 인식하지만
한글의 경우 사과라고 입력하면 진행중인 상태 isCompoising (true) 라고 인식을 해서 끝 단어가 반복이 되는 것이었다.
이 경우 if (event.nativeEvent.isComposing === false) 라는 조건문을 걸어줘서 끝단어가 반복되는 것을 막을 수 있었다.
'개발' 카테고리의 다른 글
해당 페이지에서 쿼리값만 바뀌는 오류 수정 (0) | 2024.02.02 |
---|---|
리마인드가 필요하다. (1) | 2024.02.01 |
컴포넌트 분리 작업 중 (0) | 2024.01.30 |
스파게티 코드 파티~ (4) | 2024.01.29 |
아 중요한 걸 빼먹었네. (2) | 2024.01.26 |