회원가입 과정에서 userState가 변경되는 코드에 로그를 찍어서 확인해본 결과
sign_up_progressing
(프론트 자체에서 상태를 바꿈)review
(프론트 자체에서 상태를 바꿈)sign_up_progressing
으로 잠시 바꼈다가 review
로 다시 돌아옴→ 홈탭으로 진입하는 순간에 userState를 변경하는 함수가 실행되었다고 생각되어 해당 부분을 추적
signIn 여부를 확인하는 코드만 삭제하여 해결.
useRatingCards가 불리는 부분에서 enabled 조건에 유저 상태가 active
review
dormant
상태일 경우에만 true
로 설정되어있었던 상황이라 signIn 훅을 사용하여 로그인 상태를 확인하지 않아도 되는 상황이었다.
주요한 실수를 짚어보자면
→ 두 이슈의 연관관계가 있을 것으로 생각되어 채팅방 나가기에 전송하는 profileId, 그리고 상대 프로필을 확인할 때 사용되는 profileId 데이터를 어디서 받아오고 사용하는지를 추적해봄
현재 sendbird 에서 가져오는 데이터들은 sendbird에서 제공하는 각종 메서드들을 맵핑하여 데이터를 가공하고 있는 구조였는데, 두 이슈와 관련된 데이터가 partnerOriginalUser
라는 객체였고 해당 데이터는 get partnerOriginalUser()
라는 메서드에서 생성중이었음
get partnerOriginalUser()
의 역할get partnerOriginalUser(): ChatChannelOriginalUser | undefined {
if (this.data) {
const user = this.data.users.find(
user => user.userId !== this.myOriginalUserId,
);
if (user) {
return {
profileId: user.id,
userId: user.userId,
nickname: user.nickname,
...
};
}
}
return undefined;
}
위 코드에서 생성된 user라는 상대 유저의 데이터를 로그에 찍어보니, 상대 데이터가 아닌 내 데이터가 출력되고 있음을 확인
const user = this.data.users.find(
user => {
// 로그를 찍어 비교문이 잘 작동하는지 확인
console.debug(user.userId, this.myOriginalUserId, user.userId !== this.myOriginalUserId);
return user.userId !== this.myOriginalUserId;
},
);
위와 같이 로그를 찍어서 비교문이 잘 작동하고 있는 것인지 확인을 했는데,
예를 들어 나의 userId인 this.myOriginalUserId
가 100이라면 비교 대상이 되는 user.userId
가 내 정보일 때에도 100으로 찍히는데 user.userId !== this.myOriginalUserId
의 결과는 true
였음
100 !== 100
의 결과가 true
로 찍히는 상황.
혹시해서 typeof this.myOriginalUserId
, typeof user.userId
를 다시 로그에 찍어보니 에러가 발생하는 상황에서는 this.myOriginalUserId
의 타입이 string이지만 user.userId
의 타입은 number였다.
상대 데이터가 정상적으로 보여지는 경우에는 두 데이터의 타입이 모두 string으로 동일하였음.
비교문에 데이터들을 string으로 변환하여 형을 일치시키도록 수정