Project : MZL - 로그아웃, 마이페이지 이동 시 에러해결
· 약 5분
🎯목적
마이페이지에 구현한 로직과 authentication API 복습
🤢 오류 해결
- 로그아웃 후 마이페이지, 게시글쓰기 component 이동 시 에러 (
useEffect와useFocusEffect에서 발생한 에러 해결)
1. 닉네임 수정
<UserProfile>
{onEdit ? (
<UserNicknameInput
value={editText}
onChangeText={setEditText}
></UserNicknameInput>
) : (
<UserNickname>{displayName}</UserNickname>
)}
{onEdit ? (
<UserSuccessBtn onPress={() => onSubmitEdit()}>
<UerEditBtnText>완료</UerEditBtnText>
</UserSuccessBtn>
) : (
<UserEditBtn onPress={() => onPressUpdate()}>
<UerEditBtnText>수정</UerEditBtnText>
</UserEditBtn>
)}
</UserProfile>
const onPressUpdate = () => {
/* 수정 버튼 */
setEdit(!onEdit);
};
const onSubmitEdit = async () => {
/* (수정)완료 버튼 */
await updateProfile(auth.currentUser, {
displayName: editText,
});
setEdit(!onEdit);
};
UI 부분에서 삼항연산자로 수정 버튼이 onPress되어 onPressUpdate() 함수가 실행이 되면 setState가 되어 onEdit이라는 state는 불리언타입이며 토글(true or false)이 된다!
이후 onEdit의 상태에 따라 false가 된다면 기존에 있는 닉네임을 감싼 태그가 TextInput으로 바뀌게 되고 수정버튼도 완료버튼으로 바뀌게 된다!
완료버튼이 가진 함수는 onSubmitEdit() 으로 updateProfile API를 실행해 로그인되어있는 유저의 displayName 을 TextInput에서 받아온 state인 editText로 변경한다!
const displayName = auth.currentUser?.displayName;
const uid = auth.currentUser?.uid;
const [words, setWords] = useState([]);
const [onEdit, setEdit] = useState(false);
const [editText, setEditText] = useState(displayName);
TextInput에서는 value로 기존값을 유지하기 위해 state에는 displayName이라는 변수를 가르키고 있다
해당 과정에서 CRUD 의 update부분 과 크게 다른점이 없어 많이 경험했던 터라, 빠르게 구현할 수 있었다.
2. 로그아웃
const onPressLogout = () => {
/* 로그아웃 버튼 */
auth.signOut();
// Home 화면으로 이동
reset({
index: 0,
routes: [{ name: 'Tabs', params: { screen: 'Home' } }],
});
};
위에 닉네임 수정의 로직에 비해 로그아웃은 firebase API가 아주 깔끔하게 구성되어 간단하게 구현 할 수 있었다
auth 라는 변수는 firebase 에서 getAuth함수가 실행되며 export >> import 하여 가져왔고, signOut() API 를 호출하면 바로 로그아웃 상태로 전환된다
이후 reset()함수로 Tabs의 Home으로 이동시켜준다
위 과정에서 다시한번 reset에 대해 이해할 수 있었다.
