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

[고학영] week14 #442

Conversation

hakyoung12
Copy link
Collaborator

요구사항

기본

  • 로그인, 회원가입 페이지를 만들어 주세요.
  • 로그인 페이지의 url path는 ‘/signin’, 회원가입 페이지의 url path는 ‘/signup’ 입니다.

심화

  • 로그인, 회원가입 기능에 react-hook-form을 활용해 주세요.

주요 변경사항

  • 로그인/회원가입 페이지 추가
  • FolderList 컴포넌트 분리

스크린샷

https://5-weekly-mission-nwjf3sk7e-hakyoungs-projects.vercel.app/

멘토에게

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

@hakyoung12 hakyoung12 changed the base branch from main to part3-고학영 May 18, 2024 14:44
@hakyoung12 hakyoung12 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label May 18, 2024
@hakyoung12 hakyoung12 changed the title Part3 고학영 week14 [고학영] week14 May 18, 2024
@o-seung-yeon
Copy link
Collaborator

@hakyoung12 배포 링크가 vercel 사이트로 이동하는데 확인 부탁드립니다..!

Copy link
Collaborator

@o-seung-yeon o-seung-yeon left a comment

Choose a reason for hiding this comment

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

지난번 리뷰를 너무 잘 반영해주셨어요~ 👍
더 개선할만한 부분을 코멘트로 남겼으니 이번주도 잘 부탁드려요!

고생하셨습니다 👏

const handlePasswordType = (
setType: React.Dispatch<React.SetStateAction<"password" | "text">>
) => {
setType((prevType) => (prevType === "password" ? "text" : "password"));
Copy link
Collaborator

Choose a reason for hiding this comment

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

setType 인자를 받아서 토글로 처리해주고 계시네요!
어떤 의도인지는 모르겠으나 혹시 순수함수로 작성하기 위해서 인걸까요?
코드 파악하는 면에선 인자로 받지않고 바로 setPasswordType 를 호출해서 사용하면 어떨까요?

Comment on lines +96 to +98
validate: (value) =>
value === passwordRef.current || "비밀번호가 일치하지 않아요.",
})}
Copy link
Collaborator

Choose a reason for hiding this comment

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

validate 로 전달한 함수에 두번째 매개변수로 폼 전체에 대한 값을 가져올 수 있습니다.
ref 를 대체할 수 있을 것 같습니다.

validate: (value, formValues) => ...

const onSubmit: SubmitHandler<SigninFormValues> = (data) => {
submitLoginForm(data.email, data.password);
};
// accessTokenCheck();
Copy link
Collaborator

Choose a reason for hiding this comment

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

불필요한 코드는 pr 제출 전 삭제해주세요!

setType((prevType) => (prevType === "password" ? "text" : "password"));
};

return (
Copy link
Collaborator

Choose a reason for hiding this comment

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

라이브러리를 사용하면서 속성 관련 로직이 늘어서 한눈에 파악하기 어려운 것 같아요.

제가 큰 단위의 컴포넌트를 분리해야한다고 느끼는 지점이 슥 보고 머릿속에 어떤 컴포넌트들이 포함되어있는지 쉽게 떠올릴 수 있는가 입니당
요 기준으로 생각해보셔도 좋을 것 같아요.

Copy link
Collaborator

Choose a reason for hiding this comment

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

커스텀 훅을 이용해 모바일 상태임을 명확히 분리한 점 좋습니다 👍
추가로 말씀드리고 싶은건 브라우저 창을 줄일 때 리사이즈 이벤트가 많이 발생될 거라 꽤 부하가 걸릴 것 같아요.
디바운스라는 개념을 적용해보면 좋을 것 같습니다! (+ 쓰로틀도 살펴보세요!)

Comment on lines +52 to +54
function handleClose() {
setModalOpen("");
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

함수 이름만 봤을 때 handleClose 는 닫았을 때 처리하는 로직을 담고있는 이벤트 핸들러일 것 같아요.
modalOpen 값이 빈 문자열일 경우 모달을 닫는다는 의미로 분리해주셨을 테니 closeModal 로 명명하면 어떨까요?

지난번 코멘트 남겼던 기억이 안났더라면 왜 빈 문자열을 전달하지..? 라고 생각할 뻔 했습니당
빈 문자열일 때 모달을 닫는다는 등의 주석을 달거나 함수명으로 역할을 명확히 해주면 좋을 것 같습니다~

interface FolderListProp {
folders: Folder[];
title: string;
handleTitle: (title: string, id: number | null) => void;
Copy link
Collaborator

Choose a reason for hiding this comment

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

함수 props 명 네이밍 관련된 글입니당 참고해보세요!

https://jaketrent.com/post/naming-event-handlers-react/

Comment on lines +57 to +58
<FolderMenu title={title} folders={folders} handleTitle={handleTitle} />
<AddFolderButton isMobile={isMobile} setModalOpen={setModalOpen} />
Copy link
Collaborator

Choose a reason for hiding this comment

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

잘 분리해주셨네요!
isMobile 은 사용되는 곳이 AddFolderButton 컴포넌트에 전달하는 Props 가 전부라 내부에서 호출해 사용하는게 좋을 것 같아요.

</div>
</button>
);
} else {
Copy link
Collaborator

Choose a reason for hiding this comment

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

조건이 참일 때 리턴해주고 있어서 else 문으로 감싸지 않아도 될 것 같습니다.

}

/** 로그인/회원가입 토큰체크 */
export function accessTokenCheck() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

커스텀 훅으로 파일을 분리해주세요!

@o-seung-yeon o-seung-yeon merged commit dc605bf into codeit-bootcamp-frontend:part3-고학영 May 22, 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