Skip to content
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

[김주은] sprint12 #329

Conversation

marie1016
Copy link
Collaborator

@marie1016 marie1016 commented Sep 28, 2024

요구사항

기본

  • 스프린트 미션 11

회원가입

  • 유효한 정보를 입력하고 스웨거 명세된 “/auth/signUp”으로 POST 요청해서 성공 응답을 받으면 회원가입이 완료됩니다.
  • 회원가입이 완료되면 “/login”로 이동합니다.
  • 회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.

로그인

  • 회원가입을 성공한 정보를 입력하고 스웨거 명세된 “/auth/signIp”으로 POST 요청을 하면 로그인이 완료됩니다.
  • 로그인이 완료되면 로컬 스토리지에 accessToken을 저장하고 “/” 로 이동합니다.
  • 로그인/회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.

메인

  • 로컬 스토리지에 accessToken이 있는 경우 상단바 ‘로그인’ 버튼이 판다 이미지로 바뀝니다.

  • 스프린트 미션 12

  • api 요청에 TanStack React Query를 활용해 주세요.

중고마켓

  • ‘상품 등록하기’ 버튼을 누르면 “/additem” 로 이동합니다.
  • 각 상품 클릭 시 상품 상세 페이지로 이동합니다.
  • 상품 상세 페이지 주소는 “/items/{productId}” 입니다.

상품 상세

  • 내가 등록한 상품일 경우 상품 수정, 삭제가 가능합니다.
  • 문의하기 input창에 값을 입력 후 ‘등록’ 버튼을 누르면 댓글이 등록됩니다.
  • 내가 등록한 댓글은 수정, 삭제가 가능합니다.

상품 등록

  • 이미지를 제외하고 input 에 모든 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • 활성화된 ‘등록' 버튼을 누르면 상품 등록이 완료됩니다.
  • 등록이 완료되면 해당 상품 상세 페이지로 이동합니다.

심화

  • 로그인, 회원가입 기능에 react-hook-form을 활용해봅니다.

주요 변경사항

  • 스프린트 미션 11을 진행했습니다.
  • api 요청에 TanStack React Query를 활용했습니다.

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@marie1016 marie1016 requested a review from wlgns2223 September 28, 2024 09:07
@marie1016 marie1016 self-assigned this Sep 28, 2024
@marie1016 marie1016 added the 미완성🫠 죄송합니다.. label Sep 28, 2024
);
}

const queryClient = new QueryClient();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

queryClient를 외부에 선언해도 되지만 좀 더 정확하게는 state로 선언하시더라구요. 매 request마다 클라이언트 사이드에서 쿼리클라이언트가 확실히 초기화되어있기를 보장하기 위해서 입니다.
아래의 링크를 확인해보세요.

https://jong6598.tistory.com/40

@@ -20,20 +16,28 @@ function Navbar() {
const isActive =
location.pathname === "/additem" || location.pathname === "/items";

const accessToken = localStorage.getItem("accessToken");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useEffect 내부에서 local storage에 접근하는게 더 안전한 접근법 일 것 같습니다.
코드를 읽는 속도와 로컬 스토리지에서 가져오는 속도차이로 undefined가 있을수도 있지 않을까 생각이 들어요.

try {
const query = new URLSearchParams(params as any).toString();

const response = await fetch(`${BASE_URL}/products?${query}`);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

acess token을 사용하시려면 axios가 더 편할수도 있는데 fetch를 사용하신 이유가 있을까요?

Comment on lines +21 to +26
useEffect(() => {
const accessToken = localStorage.getItem("accessToken");
if (accessToken) {
navigate("/");
}
}, [navigate]);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

acess token이 없을 경우 다른 페이지로 이동을 해야하는 경우. 이를 protected page라고 합니다.
HOC 패턴으로 해당 로직을 쉽게 풀 수 있습니다.

protected router + HOC pattern으로 해당 로직을 패턴화 시켜보세요 !
https://patterns-dev-kr.github.io/design-patterns/hoc-pattern/

잘 이해가 안가면 DM을 주시면 멘토링때 같이 살펴보시면 좋을 것 같습니다.

Comment on lines +45 to +49
className={classNames("auth-input", {
required: true,
error: errors.email,
valid: isSubmitted,
})}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

classNames 활용 좋아요 !!

@wlgns2223 wlgns2223 merged commit a67458b into codeit-bootcamp-frontend:React-김주은 Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
미완성🫠 죄송합니다..
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants