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

feat: 회원가입 유효성 검사 추가 #74

Merged
merged 1 commit into from
Sep 27, 2024

Conversation

koeunbeee
Copy link
Contributor

요약 (Summary)

회원가입 이메일 검사 정규식, 비밀번호, 비밀번호 확인 유효성 검사 추가

변경 사항 (Changes)

  • 유효한 이메일인지 확인하는 정규식 추가 및 빈칸 검사 추가 , 하단 메시지 띄움
  • 비밀번호와 비킬번호 확인 칸이 일치 하지 않을 경우 메시지 추가
  • 이름도 빈칸일 경우 메시지 추가
  • 비밀번호 확인칸 먼저 입력 후 비밀번호 칸 입력시 이전 값이 반영되어 useCallback 사용

메시지 ui 확인
image

image image

리뷰 요구사항

Copy link

Visit the preview URL for this PR (updated for commit 25172c2):

https://hearus-668d7--pr74-feat-signup-login-va-rz2p5vcw.web.app

(expires Fri, 27 Sep 2024 09:03:01 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: bf5e680be215afe513793a0ffcca015694c306c5

@koeunbeee koeunbeee requested a review from Nangniya September 20, 2024 09:03
Copy link
Contributor

@Nangniya Nangniya left a comment

Choose a reason for hiding this comment

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

지금 단계에서 코드를 보지는 않는다고는 하는데
그래도 코드가 좀 정리되어야 저희가 작업하기에도 편해서
시간되시면 정리하면 좋을것같습니다!

Comment on lines +75 to +144
const validateName = (value: string) => {
if (value.trim() === '') {
updateValidation('name', false, '이름을 입력해 주세요.');
} else {
updateValidation('name', true, '');
}
};

const validateEmail = useCallback(
(value: string) => {
if (value.trim() === '') {
updateValidation('email', false, '이메일은 필수 입력 값입니다.');
return;
}
const regex =
/([\w-.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
const isValid = regex.test(value);

if (!isValid) {
updateValidation('email', false, '유효하지 않은 이메일입니다.');
} else {
updateValidation('email', true, '');
}
},
[updateValidation],
);

const validatePassword = useCallback(
(value: string) => {
if (value.trim() === '') {
updateValidation('password', false, '비밀번호는 필수 입력 값입니다.');
return;
}
if (value.length < 8) {
updateValidation(
'password',
false,
'비밀번호는 최소 8자 이상이어야 합니다.',
);
return;
}
updateValidation('password', true, '');
},
[updateValidation],
);

const validatePasswordConfirm = useCallback(
(value: string, currentPassword: string) => {
if (value.trim() === '') {
updateValidation(
'passwordConfirm',
false,
'비밀번호 확인은 필수 입력 값입니다.',
);
return;
}

if (value !== currentPassword) {
updateValidation(
'passwordConfirm',
false,
'비밀번호가 일치하지 않습니다.',
);
return;
}

updateValidation('passwordConfirm', true, '');
},
[updateValidation],
);
Copy link
Contributor

@Nangniya Nangniya Sep 21, 2024

Choose a reason for hiding this comment

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

이런 분리할 수 있는 함수들은 utils 폴더로 분리해주세요!
파일 길이가 거의 400줄인데 가독성을 위해서는 한 파일에 120줄~150줄 이하로 유지하는게 좋다고 합니다
그 이상으로 넘어가면 사람이 읽기에 힘들어진대요
꼭 이 숫자를 강박적으로 지킬 필요는 없는데 분리할 수 있는건 분리하는게 더 좋을것같아요
컴포넌트 생명주기랑 관련없는 함수들을 이 안에 정의하면 리렌더링 될때마다 재생성되는거라
useCallback을 써도 메모이제이션 비용도 생겨서요
regex 같은것도 constants 폴더로 분리하는게 좋아보이고요
input도 원래는 유효성검사가 없었어서 따로 input 태그로 클래스이름만 똑같은것만 부여해줬는데
유효성검사 생기면서 이것도 컴포넌트로 분리해주면 좋을것같아요 isValid같은 props 넣어줘서 조건부로 에러 메시지 띄워주는 식으로요

@koeunbeee koeunbeee merged commit bf00aa3 into main Sep 27, 2024
2 checks passed
@koeunbeee koeunbeee deleted the feat/signup-login-validation branch September 27, 2024 13:45
@koeunbeee koeunbeee restored the feat/signup-login-validation branch September 27, 2024 14:18
@koeunbeee koeunbeee deleted the feat/signup-login-validation branch October 1, 2024 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants