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 #441

Conversation

HMRyu
Copy link
Collaborator

@HMRyu HMRyu commented May 18, 2024

요구사항

기본

  • 로그인/회원가입시 성공 응답으로 받은 accessToken을 로컬 스토리지에 저장합니다.
  • 로그인/회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 “/folder” 페이지로 이동합니다.
  • “회원 가입하기”를 클릭하면 ‘/signup’ 페이지로 이동합니다.
  • 이메일 input에 placeholder는 “이메일을 입력해 주세요.”
비밀번호 input에 placeholder는 “비밀번호를 입력해 주세요.”
로 설정해 주세요.
  • 이메일 input에서 focus out 할 때, 값이 없을 경우 아래에 “이메일을 입력해 주세요.” 에러 메세지를 보입니다.
  • 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 값이 있는 경우 아래에 “올바른 이메일 주소가 아닙니다.” 에러 메세지를 보입니다.
  • 비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해 주세요.” 에러 메세지를 보입니다.
  • 로그인 실패하는 경우, 이메일 input 아래에 “이메일을 확인해 주세요.”, 비밀번호 input 아래에 “비밀번호를 확인해 주세요.” 에러 메세지를 보입니다.
  • 로그인 버튼 클릭 또는 Enter키 입력으로 로그인 실행돼야 합니다.
    https://bootcamp-api.codeit.kr/docs 에 명세된 “/api/sign-in”으로 { “email”: “[email protected]”, “password”: “sprint101” } POST 요청해서 성공 응답을 받으면 “/folder”로 이동합니다.
  • 소셜 로그인에
구글 아이콘 클릭시 ‘https://www.google.com’
카카오 아이콘 클릭시 https://www.kakaocorp.com/page
로 이동하게 해주세요.
  • “회원 가입하기”를 클릭하면 ‘/signin’ 페이지로 이동합니다.
  • 이메일 input에 placeholder는 “이메일을 입력해 주세요.”
비밀번호 input에 placeholder는 “영문, 숫자를 조합해 8자 이상 입력해 주세요.”
비밀번호 확인 input에 placeholder는 “비밀번호와 일치하는 값을 입력해 주세요.”
로 설정해 주세요.
  • 이메일 input에서 focus out 할 때, 값이 없을 경우 “이메일을 입력해주세요.” 에러 메세지를 보입니다.
  • 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 값이 있는 경우 “올바른 이메일 주소가 아닙니다.” 에러 메세지를 보입니다.
  • 비밀번호 input에서 focus out 할 때, 값이 8자 미만으로 있거나 문자열만 있거나 숫자만 있는 경우, “비밀번호는 영문, 숫자 조합 8자 이상 입력해 주세요.” 에러 메세지를 보입니다.
  • 비밀번호 input과 비밀번호 확인 input의 값이 다른 경우, 비밀번호 확인 input 아래에 “비밀번호가 일치하지 않아요.” 에러 메세지를 보입니다.
  • 회원가입을 실행할 경우, 문제가 있는 경우 문제가 있는 input에 에러 메세지로 알립니다.
  • 회원가입 버튼 클릭 또는 Enter키 입력으로 회원가입 실행돼야 합니다.
  • 이메일 input focus out 할 때 이메일 중복 확인은 “/api/check-email” POST 요청해서 확인합니다. 중복된 경우 “이미 사용 중인 이메일입니다.” 에러 메세지를 보입니다.
(중복된 이메일 확인은 “[email protected]”을 활용해 주세요.)
  • 유효한 회원가입 형식의 경우 “/api/sign-up” POST 요청하고 성공 응답을 받으면 “/folder”로 이동합니다.

심화

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

주요 변경사항

  • FolderMain 컴포넌트의 볼륨을 줄였습니다.
  • 컴포넌트의 추상화 레벨을 맞추려 노력하였습니다.

스크린샷

signin
signup

멘토에게

  • 저번 주 피드백 내용을 반영하려 노력하였습니다.
  • react-hook-form 사용 시 form 태그 내부에 많은 내용들이 서로 유기적으로 연결되는데 SigninForm / SignupForm 컴포넌트 내부 form 태그를 컴포넌트 단위로 구분하는 것이 좋을지 궁금합니다.
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.
  • 감사합니다 :)

@HMRyu HMRyu requested a review from o-seung-yeon May 18, 2024 10:49
@HMRyu HMRyu added the 순한맛🐑 마음이 많이 여립니다.. label May 18, 2024
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.

컴포넌트를 큰 단위로 분리해주셔서 파악하기가 쉬워졌습니다. 👍
큰 단위로는 복잡도를 줄이는 것만으로도 의미가 있는 것 같습니다.
ui 단위로 분리한 뒤 오류 때문에 추가했던 props 들을 살펴보시고 꼭 외부에서 주입받아야 하는지 검토해보시면 좋을 것 같아요.

커다란 폼 컴포넌트 내부 작은 단위로 분리하는 것에 대한 것도 코멘트 남겼지만
ui 파악이 쉬운지 어려운지에 따라서 분리를 하고 props 관리가 어려워지는 점이 있다면 어떻게 해결할지 고민해보시면 좋을 것 같습니다.

고생하셨습니다 👏

Comment on lines +42 to +47
<Searchbar
onSubmit={handleSubmit}
onChange={handleChange}
onClose={handleClose}
inputValue={inputValue}
/>
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 +9 to +13
{params === "/signup" ? (
<div>다른 방식으로 가입하기</div>
) : (
<div>소셜 로그인</div>
)}
Copy link
Collaborator

Choose a reason for hiding this comment

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

params 에 의존해서 텍스트를 관리하게 되면 경로 텍스트가 변경됐을 때 등 상황에서 유지보수가 어려울 것 같아요.
이 컴포넌트에 props 로 텍스트를 받으면 어떨까요?

Comment on lines +18 to +20
src="/images/google.png"
alt="google"
className="p-[10px] w-[42px] h-[42px]"
Copy link
Collaborator

Choose a reason for hiding this comment

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

절대적으로 지켜야하는 건 아니지만 속성 순서 배치도 생각해보면 좋을 것 같아요!
개인적으론 className 이나 id 를 상단에 두는 편입니당
생각해보니 그런 속성들은 동작을 파악하는데 크게 의미있는 부분이 아니라 코드를 위에서 아래로 볼 때 아래쪽에 배치한 것들 위주로 보기 때문인 것 같아요
https://github.com/necolas/idiomatic-html?tab=readme-ov-file#attribute-order

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

className, id 를 상단에 두도록 하겠습니다!

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

return (
Copy link
Collaborator

Choose a reason for hiding this comment

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

로그인 페이지에서 인풋이 하나 추가됐다고 많이 길어졌네용
컴포넌트를 분리하는 기준이 사람마다 다를테지만 저의 경우 jsx 를 보고 '머릿속에 어떤 요소들이 들어있는지 떠올리는게 어렵지 않은 정도' 로 볼 수 있을 것 같네요
추상적이지만.. 로그인 페이지는 파악하기 어렵지 않았고 이 페이지는 파악이 어렵네요 ㅜ
인풋별로 컴포넌트를 분리하고 재사용하는 것도 좋을 것 같아요!

Copy link
Collaborator Author

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.

오잉 이렇게 분리중이신걸까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

이 컴포넌트는 사용하지 않는 컴포넌트인데 삭제를 못 하고 제출한 것 같습니다...!

처음 작성 시 컴포넌트를 분리해보려 이 컴포넌트를 작성했는데 사용하지 않았습니다!

title,
openModal,
closeModal,
modalStates,
Copy link
Collaborator

Choose a reason for hiding this comment

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

modalStates 를 외부에서 주입받을 필요가 없어보여요!
모달 열고 닫는 콜백도요!

이 컴포넌트 내에서 처리하면 충분할 것 같습니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

넵 이 컴포넌트 내부에서 처리해 보도록 하겠습니다!

Comment on lines +19 to +27
}: {
clickedButton: any;
handleButtonClick: any;
handleAllButtonClick: any;
folders: any;
openModal: any;
closeModal: any;
modalStates: any;
}) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기 Props 들도 외부에서 주입받을 필요가 있는지 점검해보세요~!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

넵 알겠습니다!

favorite?: boolean;
}

export default function FolderButtons({
Copy link
Collaborator

Choose a reason for hiding this comment

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

폴더 종류라는 문맥이 있는 버튼들을 나타내는 컴포넌트이니
Button 을 Tab 으로 표현해보면 ui 가 더 잘 연상될 것 같아요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

컴포넌트 이름을 FolderTab으로 변경하도록 하겠습니다!

Comment on lines +22 to +36
<ShareFolderModal
openModal={openModal}
closeModal={closeModal}
modalStates={modalStates}
/>
<EditFolderModal
openModal={openModal}
closeModal={closeModal}
modalStates={modalStates}
/>
<DeleteFolderModal
openModal={openModal}
closeModal={closeModal}
modalStates={modalStates}
/>
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 +14 to +19
<img
src="/images/pen.svg"
alt="pen"
className="cursor-pointer"
onClick={() => openModal("editModal")}
/>
Copy link
Collaborator

Choose a reason for hiding this comment

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

FolderTitlebar 에 코멘트 남겼듯이
모달이라는 이름의 컴포넌트라면 딱 모달 ui 에 해당하는 영역만 관리하는게 좋을 것 같습니다
버튼 역할을 하는 이미지 태그는 밖으로 빼주세요!

@o-seung-yeon o-seung-yeon merged commit 984ebe3 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