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

Conversation

Nico1eKim
Copy link
Collaborator

요구사항

기본

  • [로그인 페이지] “회원 가입하기”를 클릭하면 ‘/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”로 이동하나요?
  • [회원가입 페이지] “회원 가입하기”를 클릭하면 ‘/signin’ 페이지로 이동하나요?
  • [회원가입 페이지] 이메일 input에 placeholder는 “이메일을 입력해 주세요.”, 비밀번호 input에 placeholder는 “영문, 숫자를 조합해 8자 이상 입력해 주세요. ”비밀번호 확인 input에 placeholder는 “비밀번호와 일치하는 값을 입력해 주세요.”가 보이나요?
  • [회원가입 페이지] 이메일 input에서 focus out 할 때, 값이 없을 경우 “이메일을 입력해주세요.” 에러 메세지가 보이나요?
  • [회원가입 페이지] 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 값이 있는 경우 “올바른 이메일 주소가 아닙니다.” 에러 메세지가 보이나요?
  • [회원가입 페이지] 비밀번호 input에서 focus out 할 때, 값이 8자 미만으로 있거나 문자열만 있거나 숫자만 있는 경우, “비밀번호는 영문, 숫자 조합 8자 이상 입력해 주세요.” 에러 메세지가 보이나요?
  • [회원가입 페이지] 비밀번호 input과 비밀번호 확인 input의 값이 다른 경우, 비밀번호 확인 input 아래에 “비밀번호가 일치하지 않아요.” 에러 메세지가 보이나요?
  • [회원가입 페이지] 회원가입을 실행할 경우, 문제가 있는 경우 문제가 있는 input에 에러 메세지가 보이나요?
  • [회원가입 페이지] 회원가입 버튼 클릭 또는 Enter키 입력으로 회원가입 실행 되나요?
  • [회원가입 페이지] 이메일 중복 확인은 “/api/check-email” POST 요청해서 확인 할 수 있나요?
  • [회원가입 페이지] 유효한 회원가입 형식의 경우 “/api/sign-up” POST 요청하고 성공 응답을 받으면 “/folder”로 이동하나요?
  • [로그인, 회원가입 페이지 공통] 눈 모양 아이콘 클릭시 비밀번호의 문자열이 보이기도 하고, 가려지나요?
  • [로그인, 회원가입 페이지 공통] 비밀번호의 문자열이 가려질 때는 눈 모양 아이콘에는 사선이 그어져있고, 비밀번호의 문자열이 보일 때는 사선이 없는 눈 모양 아이콘이 보이나요?
  • [로그인, 회원가입 페이지 공통] 소셜 로그인에 구글 아이콘 클릭시 ‘https://www.google.com’, 카카오 아이콘 클릭시 ‘https://www.kakaocorp.com/page’로 이동하나요?
  • [로그인, 회원가입 페이지 공통] 로그인/회원가입시 성공 응답으로 받은 accessToken을 로컬 스토리지에 저장하나요?
  • [로그인, 회원가입 페이지 공통] 로그인/회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/folder’ 페이지로 이동하나요?

심화

  • [심화] 로그인, 회원가입 기능에 react-hook-form을 활용했나요?

주요 변경사항

스크린샷

image

멘토에게

  • 개인 일정이 바쁜 관계로 과제를 모두 수행하지 못했습니다.
  • 로그인, 회원가입 컴포넌트를 하나로 통일하다보니 에러나 onSubmit 등의 로직을 수행하는 데에 큰 어려움을 겪었습니다..ㅠㅠ 에러는 결국 어찌저찌 했는데 로그인/회원가입을 실행했을 때 post를 보내는 파트는 계속 수행을 해보다가 시간 부족 관계로 미완성으로 제출합니다.
  • 리팩토링도 시간 부족 이슈로 수행하지 못했습니다ㅠㅠ 저번 리뷰 사항 중 반영되지 않은 것이 많습니다.
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@Nico1eKim Nico1eKim requested a review from llucas93 December 10, 2023 11:55
@Nico1eKim Nico1eKim added the 미완성 죄송합니다.. label Dec 10, 2023
import NavLogin from "./NavLogin";
import NavProfile from "./NavProfile";

interface NavProps {
pageType: string;
pageType?: string;
Copy link
Collaborator

Choose a reason for hiding this comment

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

string 보단 유니온타입으로 타입을 명확하게 좁히는건 어떨까요?
타입스크립트에서는 되도록이면 타입을 좁히는게 좋습니다

pageType: "shared" | "..."

label="비밀번호 확인"
type="confirmPassword"
inputValue={confirmPassword}
setValue={setConfirmPassword}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이렇게 setter를 바로 Props로 넘겨주면 Input을 focus out할때 비밀번호 유효성검사를 하지못하는데요
보통 콜백함수 형태로 전달하는편이 좋아요

const 함수 = (e) => {
  const {value} = e.target;
  // pw value 유효성검사
  ...
  setPassword(value)
}

const [password, setPassword] = useState("");
const [confirmPassword, setConfirmPassword] = useState("");

const handleSubmit = async (e: FormEvent) => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

각 로그인, 회원가입 post api 추가하려면
handleSubmit 함수내에 로그인, 회원가입 분기처리를 해줘야하는데요
그러면 SignFormProps의 타입도 추가 될거구요
SigninForm, SignupForm으로 로그인과 회원가입의 로직들을 분리하는게 명확해보입니다.

추가로 SignInput 컴포넌트 처럼 Button도 공통화해서 common에 관리를 한다면
SigninForm, SignupForm으로 분리해도 코드 중복을 최소화 할수있겠죠?

다음주 멘토링때 관련해서 설명 드릴게요

function SignInForm() {
...  useState()

function handleSubmit(e) {
  // signin api ...
}

return (
<SignInput label=email />
<SignInput ... />
<SignInput ... />

<Button buttonType="Primary" text="" ... />
}

import { ReactNode } from "react";

interface SocialProps {
children: ReactNode;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Social 부분도 텍스트형태로만 되어있으니
ReactNode 보다는 아래처럼 타입을 명확하게 좁혀주는게 좋습니다
협업할때 다른사람이 타입만 보고도 알수있으니까요

type: "signin" | "signup"

setErrorMessage(type === "email" ? "이메일을 입력해주세요" : "비밀번호를 입력해주세요");
}
// 이메일 형식에 맞지 않는 경우
else if (type === "email" && !isValidEmail(inputValue)) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

(사소하지만) 위 if에서 type email을 체크했는데 else if에서 또 type이 email인지 체크할 필요는 없겠죠?


interface HeaderProps {
checkMember: string;
signSrc: string;
Copy link
Collaborator

Choose a reason for hiding this comment

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

이곳도 타입이 string 이면 협업자가 봤을때 어떤 값을 넣어야할지 SignHeader 파일을 뜯어봐야하는데요
type으로 signin or signup으로 체크해준다면 type 칸 에도 자동완성이 되기도 하고 더 명확해지죠

}

const SignInput = ({ label, inputType }: InputProps) => {
const [value, setValue] = useState("");
const SignInput = ({ label, type, inputValue, setValue, password, placeholder }: InputProps) => {
const [isVisible, setIsVisible] = useState(false);
const [eyeToggle, setEyeToggle] = useState<string>(eyeOn);
const [errorMessage, setErrorMessage] = useState("");
const passwordRef = useRef<HTMLInputElement>(null);

const handleBlur = () => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

react-hook-form을 사용한다면 이런 유효성검사 뿐만 아니라
input 값 관리 + 에러 상태도 심플하게 관리할수있어
리팩토링때나 다음 위클리미션때 꼭 사용해보는걸 추천드립니다

@llucas93 llucas93 merged commit 4879099 into codeit-bootcamp-frontend:part3-김나은 Dec 12, 2023
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