-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feat/CK-136] 로그인 유지와 UI 버그를 해결한다 #97
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
월요일부터 달리시는군요! 덕분에 자극을 받네요! 👍
너무 고생하셨고 코멘트 확인 부탁드려요!
export const useIdentifyUser = () => { | ||
const [userInfo, setUserInfo] = useState(defaultUserInfo); | ||
|
||
useEffect(() => { | ||
const accessToken = getCookie('access_token'); | ||
if (!accessToken) return; | ||
|
||
getUserInfo().then((response) => setUserInfo(response.data)); | ||
}, []); | ||
|
||
return { | ||
userInfo, | ||
setUserInfo, | ||
}; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
너무너무 좋아요! 다만 걸리는 부분들만 사알짝 짚어볼게요!
useEffect 내에서 비동기 작업을 수행할 때는 작업이 완료되기 전에 컴포넌트가 언마운트될 수 있음을 주의해야 할 것 같아요! 컴포넌트가 언마운트되고 상태를 설정하려고 시도하면 메모리 누수를 일으킬 수 있으니까요. useEffect의 clean-up 함수에서 비동기 작업을 취소하거나, 상태 업데이트를 시도하기 전에 컴포넌트가 마운트 상태인지 확인해야 하는 건 어떨까요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
완전 하나 배워가요... 수정사항 확인해주세요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인했어요!! 너무너무 좋습니다!!
import { useUserInfoContext } from '@components/_providers/UserInfoProvider'; | ||
import { useEffect } from 'react'; | ||
import isValidUserInfo from '@utils/user/isValidUserInfo'; | ||
import logout from '@utils/user/logout'; | ||
// import logout from '@utils/user/logout'; | ||
|
||
export const useValidationCheck = () => { | ||
const { userInfo } = useUserInfoContext(); | ||
|
||
useEffect(() => { | ||
if (!isValidUserInfo(userInfo)) { | ||
logout(); | ||
// logout(); | ||
} | ||
}, [userInfo]); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아예 구현부와 사용처를 없애도 좋을 것 같군요..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굿굿 지우겠습니다
<UserInfoProvider> | ||
<ToastProvider> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🙃🙃🙃🙃🙃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위에서 어푸르부를 눌렀어서.. 😅 코멘트 확인 부탁드려요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네이브 주말에 버그 고치느라 너무 고생하셨어요😭
너무 좋습니다!
바로 approve 할게요🤩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vㅔ리베리 굳입니다!!!! 고생하셨어요~
const fetchController = new AbortController(); | ||
const { signal } = fetchController; | ||
|
||
getUserInfo().then((response) => setUserInfo(response.data)); | ||
const fetchUserInfo = async () => { | ||
try { | ||
const accessToken = getCookie('access_token'); | ||
|
||
if (!accessToken) return; | ||
|
||
const userInfo = (await getUserInfo(signal)).data; | ||
|
||
setUserInfo(userInfo); | ||
} catch (e) { | ||
// 실패시 로직 | ||
} | ||
}; | ||
|
||
fetchUserInfo(); | ||
|
||
return () => fetchController.abort(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
호오우 AbortController
를 사용하셨군요..! 너무 좋습니다! 👍👍👍
* [Feat/CK-126] develop-client 빌드 오류를 해결한다 (#57) * fix: develop-client 빌드 오류 해결 * refactor: id 타입 null추가 * feat: 문자열에서 -(대시) 삭제하는 유틸 함수 구현 * test: 대시 삭제 유틸 함수 테스트 작성 * fix: merge conflict resolved * fix: merge conflicts resolved * feat: 투두 생성 rule 정의 * feat: modal shadow value theme 에 정의 * refactor: useValidateInput generic type 으로 변경 * design: todo 모달 스타일 구현 * feat: DialogContent wrapper div 태그 대신 fragment 사용하도록 변경 * feat: 투두 생성 validation 훅 구현 * feat: 투두리스트 모달 구현 * feat: backdrop style 을 스타일 파일로 이동 * feat: 투두리스트 추가 로직 구현 및 적용 * feat: GoalRoomTodoResponse 타입 정의 * chore: 골룸 전체 todolist 받는 mocking handler 추가 * feat: useFetchGoalRoomTodos (골룸 투두리스트 fetchin) 훅 구현 * feat: spinner loading component 구현 및 suspense fallback 으로 적용 * feat: 투두리스트 전체보기 데이터 매핑 * feat: request url 에서 prefix api/ 제거 * feat: Readmap List mock 요청 구현 및 API 명세에 맞춰 타입 수정 * refactor: Readmap List Dummy데이터 제거 및 API 연결 * refactor: Home 화면에 Main 컴포넌트 대신 Roadmap List 컴포넌트를 할당 * feat: 카테고리 선택 기능을 가진 훅 구현 * feat: 카테고리로 로드맵을 필터링 하는 기능 구현 * feat: 추천 로드맵 목록 컴포넌트 제거 * feat: "전체" 카테고리 추가 * feat: goalroomId prop drilling 해결하고자 scoped context api 구현 및 래핑 * feat: 인증피드 생성 훅 구현 * design: 인증 피드 모달 스타일 구현 * feat: 인증 피드 전체보기 모달 구현 및 생성 로직 매핑 * refactor: 로드맵 목록 컴포넌트 생성 * feat: 명세 변경에 맞추어 타입 변경 * feat: 요청 endpoint 변경 * refactor: 불필요한 object wrapping 제거 * refactor: 각 조건마다 boolean return 하도록 리팩토링 * refactor: Axios 설정 동기화 * [feat/CK-45] 로드맵 생성 api를 연결한다 (#58) * feat: 로드맵 생성 api 함수 & 훅 선언 * fix: interceptor의 response 값 수정 * design: 난이도 select 스타일 변경 * fix: 본문의 value가 가져와지지 않는 오류 해결 * refactor: 컴포넌트 역전을 위한 구조 변경 * design: 로드맵 추가하기 버튼 스타일 생성 * refactor: onclick시에 이벤트 버블링 방지하는 로직 추가 * feat: 입력된 태그를 가져오는 로직 구현 * feat: 로드맵 생성 api를 위한 타입 선언 * refactor: textarea 에서 input 태그로 변경 * feat: 로드맵 생성 api연결 * feat: form안에서 각 input들의 값을 가져오고 제출하는 커스텀 훅 생성 * style: 코드 개행 정리 * [feat/CK-99] 골루 목록 조회의 api를 연결한다 (#61) * chore: 불필요한 파일 삭제 * feat: 골룸 목록조회 페이지 경로 설정 * feat: 골룸 목록 조회 api 로직 구현 * feat: 골룸 목록 조회 UI구현 * feat: 충돌사항 해결 * feat: 골룸 목록 페이지 라우팅 * feat: 골룸목록조회 api 연결 * feat: 골룸목록조회 api 연결 * fix: response에서 access_token 에 접근하지 못하는 오류 해결 * feat: ui데이터 변경 * [feat/CK-129] 오류해결 & 통합한다 (#62) * fix: develop-client 오류 해결 * fix: develop-client 오류 해결 * feat: user 저장 context 구현 * feat: 유저 로그인 기능 고도화 * feat: 유저 정보 존재 validation util 구현 * chore: toast message 시간 증가 * feat: oath 버튼 주석처리 * feat: 변경된 todo type에 맞게 적용 * feat: todo 상태 변경 훅 구현 * feat: 투두 컴포넌트에 상태변경 로직 적용 * feat: 리스트 페이지 웹 접근성 향상 * [feat/CK-130] 페이지 라우팅과 잔여 서버 연결을 처리한다 (#66) * feat: 버튼 공용 컴포넌트에 onclick 추가 * feat: 로드맵 목록과 단일조회 라우팅 연결 * refactor: 데이터 패칭 함수 & 타입 네이밍 변경 * feat: 로드맵 단일조회 실제 데이터 적용 * fix: 데이터 반환 네이밍이 맞지 않는 오류 해결 * refactor: 더미데이터 제거 * refactor: 로드맵 단일조회 데이터 반환 네이밍 수정 * fix: fixture 데이터 타입 변환 * refactor: 타입 변경 * chore: 불필요한 파일 제거 * feat: dialog컴포넌트에 defaultOpen 속성 추가 * feat: 골룸 단일조회 UI구현 * design: 모달 디자인 변경 * feat: 골룸 단일조회 api 로직 구현 * feat: dialog 컴포넌트 스크롤 방지 로직 구현 * feat: 골룸 단일 조회 타입 선언 * feat: 골룸 단일 조회 데이터 연결 * design: 골름 목록 반응형 ui 적용 * design: 로드맵 생성 ui 수정 * feat: 로드맵 생성 후 경로설정 * feat: 골룸 생성하는 페이지 라우팅 * refactor: node의 textarea 스타일 수정 * feat: 통신 에러 해결 * feat: 통신 에러 해결 * fix: 골룸 생성 시, 로드맵 노드에 대한 날짜 값이 변경되지 않는 버그 수정 * refactor: 골룸을 생성하면, 골룸 리스트 페이지로 이동하도록 변경 * refactor: 골룸 생성 요청의 반환 타입에 요청 타입이 적용된 것 수정 * refactor: 골룸을 생성 시, Toast로 사용자에게 알려주도록 변경 * refactor: 골룸 생성 응답에 대한 후 처리 로직을 골룸 생성 요청 훅 내부에서 수행하도록 변경 * chore: 배경 투명한 약간 파란색 팔레트에 추가 * chore: 성별 별 얼굴 svg icon 추가 * feat: 내가 속한 골룸 조회 훅 구현 * feat: 마이 페이지 컴포넌트 구현 * refactor: 모달 내부에서 스크롤 Y 적용 및 스크롤바 제거 * refactor: on, off 기능을 useSwitch 훅으로 대체 * refactor: 컴파운드 패턴으로 구현된 모달의 상태가 외부에서 다루어지고 있는 이슈로 인한 버그 해결 * refactor: 컴포넌트 내부에서 useNavigate 대신 Link를 사용하도록 수정 * refactor: console 문 제거 및 존재하지 않는 데이터에 대한 UI 제거 * feat: 입력받은 날짜가 현재를 기준으로 유효한지 판별하는 함수 구현 * feat: 골룸 인증 피드 도출 hook 구현 * feat: 골룸 인증피드 모달에 인증피드 카드 리스트 도출 * feat: 사용자가 골룸에 참여하지 않았다면 골룸 참여버튼을 통해 참여시키기 * refactor: 사용자가 골룸에 참가중인지 아닌지 판별하지 못했던 이슈 해결 * refactor: useValidateInput 훅 검증 통과하지 못하더라도 상태는 바뀌도록 변경 * chore: 토스트 메세지 띄워지는 시간 증가 * feat: 회원가입 regex, 에러 메세지 구현 * feat: 회원가입 성공시 토스트 메세지와 함께 로그인 페이지로 이동하는 로직 구현 * feat: 회원가입 폼 검증 훅 구현 * refactor: GoalRoomCertificationFeedsResponse type 타입 선언 형식 컨벤션에 맞추어 변경 * [feat/CK-136] 로그인 유지와 UI 버그를 해결한다 (#97) * fix: 로그인이 유지되지 않는 오류 해결 * fix: 로드맵 리스트의 아이템의 크기가 다른 오류 해결 * fix: 목록조회 페이지의 높이 문제 해결 * style: 코드 스타일 정리 * refactor: unmount되었을 때 비동기 작업 취소 로직 구현 * feat: 사용하지 않는 훅 제거 * [feat/CK-142] 로드맵 생성페이지 버그를 해결한다 (#101) * design: 태그 삭제버튼 생성 * feat: 태그 삭제버튼 생성 & 태그 placeholder적용 * feat: 태그를 삭제하는 로직 구현 * style: 코드 스타일 정리 * refactor: 태그를 완성하는 trigger 분리 후 적용 * fix: 로드맵 입력부분 크기가 맞지 않는 오류 해결 * fix: 소개글 입력창의 높이가 늘어나지 않는 오류 해결 * refactor: 로드맵 입력 placeholder추가 * style: 오타 수정 * feat: onChange가 발생했을 때, onSubmit이 발생했을 때 유효성 검사를 수행하도록 Hook 확장 * chore: handleSubmit 함수에 대한 주석 추가 * feat: 코끼리끼리 InputField 구현 * design: number 타입일 떄의 스타일 추가 * design: form을 section 별로 분리 및 스타일 재조정 * feat: 객체 내부의 yyyy-mm-dd 형식의 문자열을 yyyymmdd 형태로 변환하는 함수 구현 * refactor: 외부에서 handleInputChange 함수의 타입과 에러 객체의 타입에 접근할 수 있도록 변경 * feat: 변동사항에 맞게 api fetching spec 변경 * feat: 변동사항에 맞게 api fetching spec 변경 * feat: 변동사항에 맞게 api fetching spec 변경 * feat: 무한 스크롤 적용 * feat: useIntersection hook 구현 * refactor: 각 Input의 validation을 하나의 함수로 작성하도록 리펙토링 * refactor: useFormInput 중복 로직 제거 리펙토링 * feat: 무한스크롤 적용된 api명세 반영 * feat: render-props를 이용한 필터링 컴포넌트 구현 * design: 필터링 컴포넌트 스타일 코드 작성 * feat: 골룸 필터링 constants 생성 * feat: Object.hasOwn의 타입 커스텀 * refactor: validation 객체의 메서드 내부에서 모든 유효성 검사 로직을 수행하도록 변경 * design: 에러 메시지가 잘리지 않도록 스타일 수정 * feat: any 타입을 최소화하도록 타입 리펙토링 * feat: 회의 이후 구현하지 않기로 한 Calender 컴포넌트 제거 * feat: suspense fallback 에 Spinner 컴포넌트 할당 * feat: useInfiniteScroll 훅 구현 * feat: 로드맵 리스트 Fetching 훅에 무한 스크롤 로직 적용 * feat: 로드맵 리스트 Fetching 훅에 무한 스크롤 로직 적용 * feat: RoadmapList 컴포넌트에 무한 스크롤 적용 * refactor: validation utils 함수 분리 및 테스트 코드 작성 * feat: 골룸 사용자 fetching api function 구현 * feat: 골룸 참여자 query hook 구현 * feat: 롤룸 랭킹 대시보드 박스 구현 * feat: isValidMaxValue 함수 구현 및 테스트 코드 작성 * feat: 인원수에 대한 Input 추가 * refactor: validation의 매직넘버와 에러 메시지를 상수화 * feat: InputField에 textarea 태그를 조건 분기로 추가 * refactor: 로드맵 Info 맵핑 * feat: 유저 전체 조회 query 훅 구현 * feat: 유저 전체보기 모달 구현 * feat: 로드맵 검색 컴포넌트 UI구현 * feat: 로드맵 검색 api 로직 생성 * feat: hotfix * feat: hotfix * [feat/CK-151] Selectbox의 오류를 해결한다 (#107) * design: option 넓이 수정 * fix: render props를 받는 컴포넌트 생성으로 난이도 value표시 오류 해결 * fix: render props를 받는 컴포넌트 생성으로 난이도 value표시 오류 해결 * feat: 리턴하는 상태 추가 * feat: 사이드 네브바가 항상 최상위 요소이도록 수정 * refactor: 골룸 아이템의 height가 늘어나는 버그 수정 * refactor: 골룸을 생성한 후, 골룸 목록을 다시 불러오도록 구현 * refactor: 골룸 생성 페이지에 Suspense 적용 * refactor: 골룸 모달 내부의 컨텐츠를 눌러도 모달이 닫히는 버그 수정 * design: 네브바 스타일 고도화 * feat: 로그아웃 버튼 구현 * design: 로그인 시 뒤로가기 버튼과 로고가 겹치지 않도록 수정 * refactor: 기존 로그인 form 을 핸들링하면 홈으로 갔던 로직에서 응답이 성공 시 navigating 하도록 리팩토링 * feat: image src path S3 적용한 path로 번경 * feat: 로드랩 검색결과 서브라우팅 * feat: 로드맵 검색 결과 api로직 생성 * design: 검색 아이콘 생성 * design: 로드맵 검색 스타일 코드 작성 * design: 로드맵 생성버튼 UI변경 * feat: 로드맵 검색바 구현 * refactor: 무한 스크롤의 트리거가 되는 컴포넌트 분리 * feat: 골룸 리스트 무한 스크롤 적용 * feat: 주어진 날짜 string 이 오늘 혹은 이후인지 판별하는 유틸 구현 * feat: 컴포넌트 내 페이지 이동에 Link 사용 * feat: 골룸 시작 쿼리 함수 구현 * feat: 골룸 시작 버튼 적용 * feat: 골룸 대시보드 query key 상수 적용 * feat: 인증피드 등록 시 invalidate 처리와 Input reset 로직 구현 * feat: 골룸 생성자가 아니라면 투두 생성 폼 보지 못하도록 처리 * design: 인증피드 content min-width 적용 * feat: 대시보드에서 채팅 섹션 제거 후 전체적인 레이아웃 리사이징 * feat: 대시보드에서 채팅 섹션 제거 후 전체적인 레이아웃 리사이징 * design: paylayout min-height 적용 * feat: query key 상수화 및 dependent 엘리먼트 추가 * feat: 대시보드 투두, 인증피드 총 개수 도출 로직 구현 * feat: 대시보드 투두, 인증피드 총 개수 도출 로직 구현 * fix: merge conflicts resolved * feat: 골룸 유저 랭킹 * feat: 골룸 본인 랭킹 도출 로직 구현 * feat: 골룸 본인 랭킹 폰트 변경 * feat: 날짜 변환 유틸 함수 구현 * feat: 나의 로드맵 리스트 fetching hook 구현 * feat: 마이페이지에 나의 로드맵 탭 추가 * design: 코끼리 로고 중앙정렬 * design: 로드맵 리스트 컨텐츠 가시성 문제 개선 * refactor: mainPage 제작을 위한 라우팅 처리 * feat: 메인 페이지 구현 * design: 기존 권장 소요기간 days 에서 일로 변경 * feat: 로드맵 소개 글 추가 * chore: 오타 수정 * feat: 기존 하단 진행중인 골룸보기 버튼에서 골룸 생성 버튼으로 변경 * feat: 메인 코끼리 애니메이션 추가 * chore: 파비콘 추가 * feat: 응답받은 response 변수의 네이밍을 ~Response로 일치시키도록 변경 * feat: 불피요한 컴포넌트 제거 * [feat/CK-168] 로드맵 생성부분의 변경된 api를 반영한다 ( 사진추가 기능 ) (#122) * feat: 로드맵 생성 api headers 변경 반영 * design: 이미지 업로드 아이콘 생성 * design: 로드맵 생성의 이미지 삽입 UI구현 * feat: 로드맵 생성 api 파라미터 타입 변경 * feat: 이미지를 업로드하면 preview 이미지가 보이는 기능 구현 * design: 로드맵 생성하기 버튼 UI 변경 * feat: 업로드된 이미지를 취합하는 기능 구현 * feat: 이미지를 업로드하는 커스텀 훅 생성 * feat: 로드맵 생성 관련 타입 수정 * design: 골룸 아이템의 전체적인 border-radius 조정 * feat: 골룸 정렬 로직 상수화 및 API 수정 사항 반 * feat: 시작하지 않은 골룸 대시보드 만질 수 없게 처리 * feat: 골룸 리스트 스타일 고도화 * feat: 골룸 생성 시, 날짜에 대한 유효성 검사 강화 * feat: 에러 바운더리 구현 및 적용 * [feat/CK-171] 로드맵 확인하기를 구현한다 & 로드맵 리스트의 UI를 변경한다 (#127) * feat: 충돌해결 * fix: merge conflict 해결 * design: 로드맵 리스트 정렬 변경 * feat: 로드맵 노드 리스트 api 함수 생성 * [feat/CK-157] 로드맵 리스트의 검색기능을 구현한다 (#130) * fix: mutate의 인자 변경 * feat: 로드맵 검색 api수정 * feat: select컴포넌트의 default 선택값이 있도록 수정 * refactor: 카테고리 선택에 따른 api요청을 query string을 이용하는것으로 변경 * feat: 로드맵 검색기능 구현 * fix: 로그인이 되어 있지 않을 때, 인증 헤더를 계속 재요청하는 버그 수정 * refactor: 로드맵 생성 시, 로드맵 목록을 refetch하도록 변경 * feat: private router 컴포넌트 생성 * design: 로드맵 아이템 UI 위치수정 * feat: 골룸 대시보드 로드맵 구현 * fix: 골룸 단일조회 모달 배경 z-index 오류 수정 * feat: selectBox option에 defaultOption 속성 추가 * feat: selectBox option에 defaultOption 속성 추가 * fix: 로드맵 본문이 저장되지 않는 오류 해결 * design: 로드맵 생성하기 버튼 UI수정 * fix: 카테고리 id 수정 * feat: 로드맵 생성 시 get을 받아오는 로직 추가 * fix: 로드맵 본문이 저장되지 않는 오류 해결 * refactor: 오타 수정 및 골룸 생성 페이지의 노트 설명에 Y축 스크롤 추가 * fix: 골룸생성의 쿼리스트링을 roadmapId에서 content.id로 수정 * feat: ux 개선 * fix: 없는 카테고리 삭제 (#137) --------- Co-authored-by: sh981013s <[email protected]> Co-authored-by: Jungwoo <[email protected]> Co-authored-by: Woody <[email protected]> Co-authored-by: Jiwon Lee <[email protected]>
📌 작업 이슈 번호
CK-136
✨ 작업 내용
💬 리뷰어에게 남길 멘트
유저의 정보를 전역적으로 저장하는 로직을 수정했습니다. 기존의 로직은 페이지가 새로고침 되면서 App이 다시 실행되면
context도 새로고침 되면서 화면 전역적으로 유저의 정보를 표시를 안해주고, 로그인이 풀린것 것 처럼 보이는 오류가 있었어요.
그래서
useIdentifyUser
라는 커스텀훅을 통해 훅이 실행될 때마다 쿠키의 accessToken을 확인하고 유저의 정보를 가져오는 api를 호출하도록 했어요.이 훅을 userProvider 내에서 실행하면 유저의 정보가 accessToken이 있는 이상 전역적으로 공유됩니당
🚀 요구사항 분석