CHZZK-Study / Grass-Diary-Client

취지직 2팀 프로젝트 Grass Diary
1 stars 3 forks source link

♻ refactor: IProfile 타입 정리 #157

Closed rkdcodus closed 2 months ago

rkdcodus commented 2 months ago

✅ 체크리스트

📝 작업 상세 내용

1️⃣ 중복 제거

2️⃣ Pick/Omit 기능 사용

// Setting Page updateProfile Type 수정 전
interface IUpdateProfile {
  nickname?: string;
  profileIntro?: string;
}

//  수정 후 
type pickProfileImageURL = Pick<IProfile, 'profileImageURL'>;

// Setting Page updateProfile Type
type omitProfileImageURL = Omit<IProfile, 'profileImageURL'>;

3️⃣ useProfile 수정 사항

수정 전

const useProfile = () => {
  const profile = useRecoilValue<IProfile | undefined>(profileSelector);

  const { profileImageURL, nickName, profileIntro } = profile || {};

  return { profileImageURL, nickName, profileIntro };
};

수정 후

const useProfile = () => {
  const profile = useRecoilValue<IProfile | undefined>(profileSelector);
  const profileFromAtom = useRecoilValue(profileAtom);

  const { profileImageURL, nickName, profileIntro } = profile || profileFromAtom;

  return { profileImageURL, nickName, profileIntro };
};

profileAtom의 기본값은 아래와 같이 전부 '' 문자열로 되어있습니다.

default: {
    profileImageURL: '',
    nickName: '',
    profileIntro: '',
  },

profileSelector에서 memberId가 falsy 값일 경우, useProfile의 profile은 undefiend 값을 가지게 됩니다. profile이 undefined일 경우, || 논리합 연산자로 인해 두번째 피연산자 값인 profileFromAtom 값을 가져옴으로써 profileAtom의 기본값을 사용합니다. 수정 전에는 {}를 반환했습니다. 기본값을 사용함으로써 useProfile은 언제나 string을 반환하게 됩니다.

수정함으로써 아래 타입 에러를 해결했습니다.

Setting 페이지

image

Profile 컴포넌트

image

useProfile이 profileAtom의 기본값을 반환할 경우 마이페이지는 이렇게 나타납니다.

image {} 였을 때는 profileURL, nickname, info 모두 아무것도 없는 상태로 나타났습니다.

추후 recoil -> zustand로 바뀔 예정이긴하지만 조금 다듬어 봤습니다! 😄

4️⃣ nickname -> nickName

사용자 정보 patch api의 닉네임 필드명은 nickname, 멤버의 기본 프로필 정보 api의 닉네임 필드명은 nickName으로 깔끔한 타입 정리를 위해 통일이 필요했습니다. 백엔드로 수정 요청하였고 예슬님께서 수정해주셔서 적용 완료했습니다!

🚨 버그 발생 이유 (선택 사항)

🔎 후속 작업 (선택 사항)

🤔 질문 사항 (선택 사항)

📚 참고 자료 (선택 사항)

추가적인 참고 사항이나 관련된 문서, 링크 등을 제공해주세요.

📸 스크린샷 (선택 사항)

변경 사항에 대한 스크린샷이 있다면 첨부해주세요.

✅ 셀프 체크리스트

이슈 번호: Close #156