Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 결합선택자
- ㅜㄹㄹ
- 깃허브오류
- JS예제
- appendChild
- 부트캠프
- 개발일지 #TIL #프론트엔드 #HTML
- 부트캠프 #코딩 #개발일지 #프론트엔드 #CSS #TIL
- 부트캠프 #스파르타코딩클럽 #개발일지# #html
- 알고리즘
- 부트캠프 #개발일지 #TIL #Position #위치
- 의사클래스
- 부트캠프 #CSS #개발일지 #TIL #박스모델
- useEffect
- js
- Til
- 개발일지
- 템플릿스트링
- querySelector
- useState
- 부트캠프 #개발일지 #TIL #그리드 #CSS
- CSS
- React
- textContent
- 부트캠프 #개발일지 #TIL #FlexboxFroggy #displayflex #flexbox
- 리액트
- 부트캠프 #스파르타코딩클럽 #개발일지# #TIL #Javascript #confirm #location.href
- 부트캠프 #CSS #개발일지 #TIL
- 부트캠프 #개발일지 #TIL #CSS속성 #float #clear
- 특성선택자
Archives
- Today
- Total
나의 개발일지
[React/TypeScript] 최종프로젝트 - Mango(환경오염 줄이기 / 지구 살리기 프로젝트!) (진행 중) - 프로필 업데이트 오류 본문
과제 및 팀프로젝트
[React/TypeScript] 최종프로젝트 - Mango(환경오염 줄이기 / 지구 살리기 프로젝트!) (진행 중) - 프로필 업데이트 오류
heew0n 2024. 2. 4. 15:51
모달이 뜨고 변경 전 프로필이 1초 정도 머물다가 바뀌는 오류가 있었다
기존 코드
const userProfileUpdateMutation = useMutation({
mutationFn: async ({ authCurrentUser, displayName, profileImage }: updateProfileInfoProps) =>
await updateProfileInfo({ authCurrentUser, displayName, profileImage }),
onSuccess: (updatedUser) => {
queryClient.invalidateQueries({ queryKey: [`${QUERY_KEYS.USERS}`] });
if (updatedUser) {
authContext?.updateCurrentUserInContext(updatedUser);
}
setIsEditing(false);
const onClickSave = () => {
modal.close();
};
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '프로필이 수정되었습니다.',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
},
onError: (error) => {
console.error('프로필 업데이트에 문제가 발생했습니다.', error);
setIsEditing(false);
const onClickSave = () => {
modal.close();
};
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '프로필 업데이트에 문제가 발생했습니다.',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
}
});
//프로필 수정 업데이트
const onSubmitModifyProfile = async (e: React.FormEvent) => {
e.preventDefault();
const onClickSave = () => {
modal.close();
};
if (authCurrentUser!.displayName !== displayName) {
setIsDisplayNameChanged(true);
}
if (authCurrentUser!.photoURL !== profileImage) {
setIsPhotoURLChanged(true);
}
// if (!isChecked && isDisplayNameChanged) {
if (!isDisplayNameChanged) {
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '중복확인 버튼을 눌러주세요',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
} else {
if (authCurrentUser) {
if (isDisplayNameChanged || isPhotoURLChanged) {
userProfileUpdateMutation.mutate({ authCurrentUser, displayName, profileImage });
setIsEditing(false);
setIsDisplayNameChanged(false);
setIsPhotoURLChanged(false);
}
}
}
};
문제점은 프로필 업데이트와 모달창이 userProfileUpdateMutation의 onSuccess 콜백 안에서
동시에 이루어지고 있었던 것이다.
const userProfileUpdateMutation = useMutation({
mutationFn: ({ authCurrentUser, displayName, profileImage }: updateProfileInfoProps) =>
updateProfileInfo({ authCurrentUser, displayName, profileImage }),
onSuccess: (updatedUser) => {
queryClient.invalidateQueries({ queryKey: [`${QUERY_KEYS.USERS}`] });
if (updatedUser) {
authContext?.updateCurrentUserInContext(updatedUser);
}
setIsEditing(false);
},
onError: (error) => {
console.error('프로필 업데이트에 문제가 발생했습니다.', error);
setIsEditing(false);
const onClickSave = () => {
modal.close();
};
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '프로필 업데이트에 문제가 발생했습니다.',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
}
});
const onSubmitModifyProfile = async (e: React.FormEvent) => {
e.preventDefault();
const onClickSave = async () => {
if (!authCurrentUser) {
console.error('현재 사용자 정보가 없습니다.');
return;
}
await userProfileUpdateMutation.mutate({ authCurrentUser, displayName, profileImage });
modal.close();
};
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '프로필이 수정되었습니다.',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
};
프로필 업데이트 코드를 밖으로 빼서 수정을 해주었더니 navBar의 프로필이 바뀌지 않는 오류가 발생되었다.
새로고침을 한 후에야 바뀐다..
const onSubmitModifyProfile = (e: React.FormEvent) => {
e.preventDefault();
const onClickSave = () => {
modal.close();
};
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '프로필이 수정되었습니다.',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
if (authCurrentUser!.displayName !== displayName) {
if (!isDisplayNameChanged) {
const openModalParams: Parameters<typeof modal.open>[0] = {
title: '중복확인 버튼을 눌러주세요',
message: '',
leftButtonLabel: '',
onClickLeftButton: undefined,
rightButtonLabel: '확인',
onClickRightButton: onClickSave
};
modal.open(openModalParams);
} else {
if (authCurrentUser) {
userProfileUpdateMutation.mutate({ authCurrentUser, displayName, profileImage });
setIsEditing(false);
setIsDisplayNameChanged(false);
setIsPhotoURLChanged(false);
}
}
} else if (authCurrentUser) {
userProfileUpdateMutation.mutate({ authCurrentUser, displayName, profileImage });
setIsEditing(false);
setIsDisplayNameChanged(false);
setIsPhotoURLChanged(false);
}
};
다시 수정했다..
코드 순서도 중요하고 함수 내에서 사용되는 로직도 잘 생각해서 구현해야겠다는 생각이 들었다