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

[김윤미] week13 #403

Merged

Conversation

ynmkim
Copy link
Collaborator

@ynmkim ynmkim commented Jan 16, 2024

요구사항

기본

12주차

  • Input 컴포넌트에 값이 없는 경우 회색의 placeholder값을 볼 수 있나요?
  • Input 컴포넌트에 focus in 하면 파랑색 테두리를 볼 수 있나요?
  • Input 컴포넌트에 눈 모양 아이콘을 누르면 비밀번호 가리기/보기 기능이 토글 되나요?
  • Input 컴포넌트에 값이 에러케이스일 경우 빨강색 테두리와 에러 메세지를 볼 수 있나요?
  • Input 컴포넌트에서 focus out 하면 실행할 함수를 설정할 수 있나요?

13주차

  • [로그인 페이지] “회원 가입하기”를 클릭하면 ‘/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을 활용해 주세요.

주요 변경사항

  • Button 컴포넌트 리팩토링
  • Input 컴포넌트 구현
  • SignupPage 구현

스크린샷

  • 작업중

멘토에게

  • 로그인, 회원가입 페이지 계속 작업중이예요. react-hook-form 사용해서 유효성 체크 세부사항 진행중이예요.
  • 지난 리뷰에서 알려주신 classname 라이브러리를 사용하니까 module.css 작업이 훨씬 편해졌어요. 감사합니다!
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@ynmkim ynmkim added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성 죄송합니다... labels Jan 16, 2024
@ynmkim ynmkim requested a review from clianor January 16, 2024 14:37
Copy link
Collaborator

@clianor clianor Jan 19, 2024

Choose a reason for hiding this comment

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

css를 초기화할 때 layer를 사용하면 혹시나 생길 수 있는 css 적용 우선순위를 해결하는 데 도움이 됩니다.
읽어볼 만한 글을 아래에 첨부합니다.
https://medium.com/appwrite-io/css-layers-for-css-resets-f60f270aa1cd
https://developer.mozilla.org/en-US/docs/Web/CSS/@layer

layer가 필요한 경우를 겪어보셨는지는 모르겠지만 혹시 styled-components와 styled-reset를 함께 사용했을 때 일부 css가 작성한 css보다 styled-reset이 우선 적용되는 문제가 있습니다.
layer는 어디에 저장해두셨다가 해당되는 이슈를 겪으셨을 때 이런 게 있구나 하고 찾아서 적용해 보시길 바라겠습니다.

@@ -0,0 +1,31 @@
import { ReactNode } from 'react';
Copy link
Collaborator

Choose a reason for hiding this comment

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

ReactNode와 MouseEvent는 react로부터 제공되는 타입들이기 때문에 아래와 같이 작성되어야 합니다.
import { ReactNode, MouseEvent } from 'react';

interface ButtonProps {
children: ReactNode;
className?: string;
variant: 'primary';
Copy link
Collaborator

Choose a reason for hiding this comment

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

primary 밖에 없는 버튼이라면 variant prop을 사용하지 않는 게 좋았을 것 같습니다.
항상 정해진 값으로 지정되어 있다면 props로 값을 내려줄 필요는 없습니다.
해당 variant는 삭제해 주는 게 좋겠습니다.

children,
className = '',
variant = 'primary',
onClick,
Copy link
Collaborator

Choose a reason for hiding this comment

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

onClick과 children은 구조 분해하지 않으면 props와 같이 button 요소에 넘어가게 됩니다.
불필요한 구조 분해를 생략하는 게 어떨까요?

import { MouseEvent } from 'react';
import styles from '@/components/Button.module.scss';
import classNames from 'classnames/bind';
interface ButtonProps {
Copy link
Collaborator

Choose a reason for hiding this comment

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

ButtonProps는 최종적으로 아래와 같이 수정되면 좋을것 같습니다.

type ButtonSize = 'large' | 'small';

interface ButtonProps extends React.ComponentProps<'button'> {
  size: ButtonSize;
}

위와 같이 수정한 이유는 아래와 같습니다.

  1. 추후 Button에 넘어오는 size를 외부에서 상태로 관리할 경우 해당 버튼 타입을 가져다 사용하기 위함입니다.
  2. React.ComponentProps<'button'>를 확장하도록 함으로써 ButtonProps가 기본 HTML button 요소의 모든 프로퍼티를 상속받도록 하였습니다.

className={buttonLinkStyles['button-primary']}
<Button
className={styles.button}
variant={'primary'}
Copy link
Collaborator

@clianor clianor Jan 19, 2024

Choose a reason for hiding this comment

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

prop으로 넘기는 값이 문자열인 경우 괄호를 생략해서 variant="primary" 와 같이 작성하는 게 좋습니다.
그 이유는 아래와 같습니다.

  1. JSX에서 props에 괄호를 사용하는 것은 표현식을 평가하기 위함입니다.
    변수나 함수와 같은 값을 넘길 때 사용됩니다.
  2. 문자열과 같은 리터럴 값은 표현식으로 표현하지 않고 직접 문자열로 넘겨주게 됩니다.

eslint에서 다음의 룰을 사용하여 괄호 안에 담긴 문자열을 괄호가 없도록 수정할 수 있습니다.
해당 룰을 사용하여 props에 괄호를 사용하는 부분의 일관성을 유지할 수 있게 됩니다.
react/jsx-curly-brace-presence

@clianor
Copy link
Collaborator

clianor commented Jan 19, 2024

제가 지난주에 classname를 추천해 드렸었나 보군요 잘 사용하고 계신 것 같아 다행입니다 ㅎㅎ
혹시 궁금한 점이 있으시다면 언제던 질문 주세요.

@clianor clianor merged commit e4f2785 into codeit-bootcamp-frontend:part3-김윤미 Jan 19, 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