codestates / codestates/Reciper-client

[✍️ Dev Log] 이우성 / 2021-06-01

Open
#298 0 comments 0 reactions 1 assignee Claimed by @useonglee View on GitHub
@useonglee/기록은 성장의 밑거름 💨 Dev Log
Dominant language
TypeScript
Stars
13
Forks
7
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

- #285 Chat 다른 유저 시점에서 생기는 오류 점검

![실시간 채팅 삭제](https://user-images.githubusercontent.com/75570915/120335917-d71e5a00-c32c-11eb-8343-d8ab27717b51.gif)



![실시간 채팅 점검](https://user-images.githubusercontent.com/75570915/120335922-d84f8700-c32c-11eb-818b-a126691ba771.gif)

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?


실시간으로 채팅을 수정하고 삭제하는 부분에서 정말 애먹었다...


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);
```


![실시간 채팅 점검 연속으로 삭제](https://user-images.githubusercontent.com/75570915/120342426-be18a780-c332-11eb-8ffe-987766d8342d.gif)



![실시간 채팅 점검 연속으로 수정](https://user-images.githubusercontent.com/75570915/120342433-bf49d480-c332-11eb-9b83-cf52d183e2d1.gif)

이 방법 말고는 도저히 생각이 나질 않았다.. 하지만 이 로직이 채팅의 모든 id를 검사한 후에 `+1`을 해주는 것 같아서 마음이 걸린다.


계속 점검을 하고 문제점을 찾아 봐야겠다.

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [x] 랜딩 페이지 검토 및 수정

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.