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

Conversation

Byukchong
Copy link
Collaborator

요구사항

기본

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

심화

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

주요 변경사항

  • 태그를 Image 컴포넌트로 수정
  • 태그를 Link 로 수정
  • 커스텀훅을 사용해서 비즈니스로직을 소폭 간소화
  • utils 폴더 및 하위 파일 위치 변경
  • signup signin 페이지 생성

스크린샷

https://5-weekly-mission-jjs-byukchongs-projects.vercel.app/

멘토에게

@Byukchong Byukchong 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.

상태나 컴포넌트 네이밍을 좀 더 직관적으로 수정해주신 것 같아요!
훅폼 라이브러리를 사용하진 않았지만 커스텀 훅으로 분리해서 관리한 점도 좋았습니다.

고생하셨습니다 👏

const router = useRouter();

const handleLogout = () => {
localStorage.removeItem('accessToken');
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 +44 to +66
try {
const response = await fetch(SIGN_IN_BASE_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ email, password }),
});

if (!response.ok) {
throw new Error('로그인에 실패했습니다.');
}
const data = await response.json();
const { accessToken, refreshToken } = data;
localStorage.setItem('accessToken', accessToken);
localStorage.setItem('refreshToken', refreshToken);

router.push('/folder');
} catch (error) {
console.error('Error:', error);
handleIdErrorOnSubmit();
handlePWdErrorOnSubmit();
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

fetch / success / fail 을 나눠서 관리하면 어떨까요?

// api 관련 파일
const signin = async (body: {email: string, password: string}, {successCb, fallCb}?: {successCb: () => void, failCb: () => void}) => {
  // ...
}

function handleSubmit() {
  signin({email, 토큰 저장, 에러표시});
  // 아니면 fetch 함수만 분리하고 try catch 문과 성공 실패는 이 함수에서 처리해도 괜찮을 것 같아요.
}

Comment on lines +23 to +30
const {
email,
isIdError,
idErrorMsg,
handleEmailChange,
handleIdBlur,
handleIdErrorOnSubmit,
} = useSignInId();
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 +4 to +11
export interface InputProps {
value: string;
onChange: (value: string) => void;
placeholder: string;
isError: boolean;
ErrorMsg: string;
onBlur: () => void;
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

id, password input 에서 공통으로 사용된다면 외부 파일에 추가해서 관리하는게 좋을 것 같습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

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

이번에 styled component 에서 module css 로 스타일링 방식을 변경하신 것 같네요!
이유가 있으신가요?

@o-seung-yeon o-seung-yeon merged commit 3111bda 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