codestates / codestates/Reciper-client
[✍️ Dev Log] 이우성 / 2021-06-01
- Dominant language
- TypeScript
- Stars
- 13
- Forks
- 7
- PR merge metrics
- No merged PRs in 30d
Description
### 오늘은 어떻게 프로젝트에 기여했나요?
- #285 Chat 다른 유저 시점에서 생기는 오류 점검


### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
실시간으로 채팅을 수정하고 삭제하는 부분에서 정말 애먹었다...
chat 마다 고유 값인 `id`가 있는데 내가 만약 채팅을 입력하면 그 chat id가 1번이라고 가정하자.
그러면 그 1번을 다시 삭제 요청을 하면 서버에서 1번을 삭제한다.
그리고 내가 다시 채팅을 입력하면 그 채팅은 다시 1번이 된다. 하지만 서버에서는 2번이 된다.. 응..? 서버는 삭제했던 자리는 공백으로 처리가 되었다.
이 부분을 socket으로 맞춰서 해결하려고 하니 정말 애먹은 것 같다..
결국 해결은 했지만 배포 한 상태에서 다시 점검을 해봐야 한다.
해결한 방법으로는 채팅을 보낼 때 마다 클릭한 chat id에서 `useState` 상태값으로 `+ 1`으로 인해 상태 변경을 해주고 서버에서도 현재 `id`인 것 마냥 서버에 보내주었다. 그랬더니 연속으로 이것 저것 삭제하거나 수정해도 별 다른 문제점을 찾지 못했다.
```js
// 전체 채팅을 받아올 때
useEffect(() => {
socket?.on('getAllMessages', ({ chats, isEnd }: AllMessagesDataType) => {
setCurrentIndex(chats[chats.length - 1].id + 1);
setChatBucket([...chats, ...chatBucket]);
});
}, [chatBucket]);
// 채팅 삭제 버튼을 누른 후
setCurrentIndex(chat.id + 1);
const getChatDelete = getChatDeleteData(room, index, chat.id);
socket?.emit('deleteMessage', getChatDelete);
// 채팅 입력 후
const newChat: ChatDataType = newChatData(currentIndex, chat, '', room, profileInfo);
socket?.emit('sendMessage', data);
```


이 방법 말고는 도저히 생각이 나질 않았다.. 하지만 이 로직이 채팅의 모든 id를 검사한 후에 `+1`을 해주는 것 같아서 마음이 걸린다.
계속 점검을 하고 문제점을 찾아 봐야겠다.
### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
- [x] 랜딩 페이지 검토 및 수정
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.