codestates / codestates/Reciper-client

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

Open
#332 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

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

- #325 Profile Image 기본 프로필 이미지로 변경 버튼 구현
- #327 workspace room 수정 및 삭제 모달창 CSS 수정
- #329 Chat bug fix
- #331 chat 수정 및 삭제 기능 오류 해결!


![프로필 초기화 버튼](https://user-images.githubusercontent.com/75570915/120816444-b43db100-c58b-11eb-9349-f8fd9fb793d9.gif)



![첫번째 채팅 해결](https://user-images.githubusercontent.com/75570915/120805152-6bccc600-c580-11eb-826b-de410dcf3684.gif)



![채팅 순서 상관없이 삭제 가능](https://user-images.githubusercontent.com/75570915/120805058-4c359d80-c580-11eb-96b4-f3e19c4b6162.gif)

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

* 채팅 오류 해결 부분

채팅을 입력하면 `broadcast`로 인해서 채팅을 받는 사람 입장에서 콘솔을 찍어보면 채팅 `id` 값이 잘 찍히고 있었다.


하지만 내 로컬에는 채팅 `id` 값이 계속 `0`으로 찍히다가 새로고침을 해야만(socket으로 DB를 불러와야만) `id`값이 콘솔에 찍혔다.


이러한 현상때문에 채팅을 입력하고 첫번째 채팅은 삭제가 되지 않았다. 처음 채팅은 `id`와 `index` 모두 `0`이기 때문이다.


하지만 `broadcast`로 인해서 `id`값을 서버에 보낼때는 정상적인 값으로 서버에 보내는데, 화면에는 안그려질 뿐이다.


그래서 첫 해결 방안이 내가 채팅을 하고 `socket.on`으로 채팅 기록을 받아올 때 채팅 `id` 값도 같이 받아오기로 했다.


```js
useEffect(() => {
socket?.on("nowMessageId", ({ id }: ChatIdType) => {
setCurrentIndex(id);
});
}, [currentIndex]);
```


이런식으로 채팅을 칠 때 마다 그 채팅의 `id`값을 받아서 바로 값을 변경시켜 주었다.


하지만 여전히 첫 채팅의 `id`값은 0이고, `setState`로 인한 상태 값 변경이 되질 않았다. 새로 고침을 해야만 `setState`가 작동을 했다.
(안됐던 이유는 내가 동기적으로 생각했기 때문! setState는 비동기임을 잊지말자.. state가 변경된다고 해서 꼭 DOM 리렌더링이 일어나는 것은 아니다! 퍼포먼스에 따라 다름 주의, state는 즉각 변경이 되어도 props로 전달할 때는 다르다.)


그래서 두번째 방안이 서버에서 해당 채팅의 `index`까지 같이 내려주기로 하였다.


```js
socket?.on("nowMessageId", ({ id, chatLength }: ChatIdType) => {
if (chatBucket[chatLength]) {
chatBucket[chatLength].id = id;
}
});
```


이런식으로 해서 해결을 할 수가 있었다!!


* 프로필 이미지 기본 이미지로 변경하는 부분

이 부분은 서버에 `image = ''` 이런식으로 빈 문자열로 요청을 보내면 기본 이미지가 삭제 되는 줄 알았다. 하지만 서버에는 빈 문자열에 대한 처리 로직이 없었기 때문에 내가 빈 문자열로 보내도 이미지는 초기화가 되지 않았다.

어려움을 겪어서 바로 팀원들에게 말을 했더니 바로 해결이 되었다!

서버에서 빈 문자열 대신 'deleteImage' 라는 문자열을 받게 되면 빈 문자열 처럼 이미지를 없애는 로직을 하나 추가했다. 그랬더니 바로 해결을 할 수가 있었다!!!

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

- [ ] 프로필 유저 프로젝트 진행 상황 목록 표시 기능

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.