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

[ 4주차 기본/생각 과제 ] 로그인 #4

Open
wants to merge 29 commits into
base: main
Choose a base branch
from
Open

[ 4주차 기본/생각 과제 ] 로그인 #4

wants to merge 29 commits into from

Conversation

hoeun0723
Copy link
Contributor

@hoeun0723 hoeun0723 commented Nov 17, 2023

🌱 기본 조건

  • .env 파일 사용하기

🧩 기본 과제

[ 로그인 페이지 ]

  1. 로그인
    • 아이디와 비밀번호 입력후 로그인 버튼을 눌렀을시 성공하면 /mypage/:userId 로 넘어갑니다. (여기서 userId는 로그인 성공시 반환 받은 사용자의 id)
  2. 회원가입 이동
    • 회원가입을 누르면 /signup으로 이동합니다.

[ 회원가입 페이지 ]

  1. 중복체크 버튼

    • ID 중복체크를 하지 않은 경우 검정색입니다.
    • ID 중복체크 결과 중복인 경우 빨간색입니다.
    • ID 중복체크 결과 중복이 아닌 경우 초록색입니다.
  2. 회원가입 버튼

    • 다음의 경우에 비활성화 됩니다.
    • ID, 비밀번호, 닉네임 중 비어있는 input이 있는 경우
    • 중복체크를 하지 않은 경우
    • 중복체크의 결과가 중복인 경우
    • 회원가입 성공시 /login 으로 이동합니다.

[ 마이 페이지 ]

  1. 마이 페이지
    • /mypage/:userId 의 userId를 이용해 회원 정보를 조회합니다.
    • 로그아웃 버튼을 누르면 /login으로 이동합니다.

🌠 심화 과제

[ 로그인 페이지 ]

  1. 토스트
    • createPortal을 이용합니다.
    • 로그인 실패시 response의 message를 동적으로 받아 토스트를 띄웁니다.

[ 회원가입 페이지 ]

  1. 비밀번호 확인

    • 회원가입 버튼 활성화를 위해서는 비밀번호와 비밀번호 확인 일치 조건까지 만족해야 합니다.
  2. 중복체크

    • 중복체크 후 ID 값을 변경하면 중복체크가 되지 않은 상태(색은 검정색)로 돌아갑니다.

생각과제

  • API 통신에 대하여
  • 로딩 / 에러 처리를 하는 방법에는 어떤 것들이 있을까?
  • 패칭 라이브러리란 무엇이고 어떤 것들이 있을까?
  • 패칭 라이브러리를 쓰는 이유는 무엇일까?

실행영상

bandicam.2023-11-17.23-32-25-343.mp4
bandicam.2023-11-17.23-32-46-882.mp4
bandicam.2023-11-17.23-33-09-392.mp4

@hoeun0723 hoeun0723 self-assigned this Nov 17, 2023
@hoeun0723 hoeun0723 changed the title "[ 4주차 기본/생각 과제 ] 로그인 [ 4주차 기본/생각 과제 ] 로그인 Nov 17, 2023
import { API } from "../constants/api.constant";
import publicApiInstance from "./instance/publicApiInstance";

const authApi = {

Choose a reason for hiding this comment

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

헐 이렇게 상수로 정리해줄 수 있군요..!!👍👍👍
배워갑니다....🤩

},
(error) => {
// 요청 에러가 발생했을 때 수행할 로직
console.log(error); // 디버깅

Choose a reason for hiding this comment

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

p4 : 콘솔은 사용하고 나서는 지워주는게 좋다고 하네요..!!
관련 링크 첨부합니다!

font-family: "Open Sans";
src: local("Open Sans"), url(${OpenSans_Regular}) format("truetype");
font-weight: 400;
}

Choose a reason for hiding this comment

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

폰트 정의 너무 깔끔하네요✨

import Styles from "./styles/index.jsx";

ReactDOM.createRoot(document.getElementById("root")).render(
<RecoilRoot>

Choose a reason for hiding this comment

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

우왁 리코일..! 어떻게 쓰는지 배워갑니다🔥

border-radius: 0.5rem;
background-color: ${({ theme: { colors } }) => colors.greyScale.white};
padding: 3rem;
gap: 2rem;

Choose a reason for hiding this comment

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

이번에 합세하면서 배치할 때 flex로 배치하고 필요한 padding값을 준 다음 요소 간격만 gap을 주는 게 더 간편하고 좋은 방법인 걸 알게 됐어요..!
호은이는 이미 잘 쓰고 있었구나!!!! 대박 잘해~🤩 최고에욤

/>
<TextInput
label={"PASSWORD"}
placeholder={"비밀번호를 입력해주세요"}

Choose a reason for hiding this comment

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

placeholder 속성 값을 줄 때 중괄호로 안감싸줘도 적용되는 걸로 알고 있는데, 중괄호를 사용하는 이유가 뭔지 궁금해요!💭

value={password}
/>
<S.ButtonContainer>
<Button onClick={onClickLogin} disabled={canActiveButton}>

Choose a reason for hiding this comment

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

p2 : button도 타입이 존재해서 button 타입으로 지정해주는 게 좋다고 하네요~! 타입 지정해 주는 거 어떨까요? 관련 링크 첨부합니다!

margin: 0;
}
html {
font-size: 10px; // rem 단위를 편하게 사용하기 위해 10px로 함.

Choose a reason for hiding this comment

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

헙 너무 섬세하고 똑똑하네요

@namdaeun
Copy link

되게 다양한 걸 많이 사용해준 것 같아서 코드 보는 내내 신기하고 재밌었어요!!
많이 배워가요 💛

Copy link
Member

@ljh0608 ljh0608 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 +44 to +53
visuallyHidden: () => css`
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
Copy link
Member

Choose a reason for hiding this comment

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

p2) css를 사용할 때 important는 최대한 지양해야한다고 생각해요 important가 들어감으로써 우선순위가 꼬이는 일이 발생하진 않을까요~?
또 visuallyHidden이 hidden처리하는 부분을 추상화한것이라고 생각되는데 그게 맞다면 이 모든 로직이 꼭 필요한 것인지 궁금합니다!

Comment on lines +3 to +10
const mixin = {
// flex
flexBox: ({ direction = "row", align, justify }) => css`
display: flex;
flex-direction: ${direction};
align-items: ${align};
justify-content: ${justify};
`,
Copy link
Member

Choose a reason for hiding this comment

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

정말 자주쓰는 부분이라 추상화하신거 너무 멋지고 대단하고 빛호은,,, 배워갑니다~

Comment on lines +200 to +212
export const zIndex = {
gnbLevel: 100,
dropModalLevel: 200,
modalLayout: 900,
modalLevel: 950,
modalContent: 999,
};

const deviceSizes = {
mobile: "375px",
tablet: "768px",
pc: "1024px",
};
Copy link
Member

Choose a reason for hiding this comment

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

혹시 이거 근데 라이브러리 같은건가요...? 거의 철두철미 회사 컨벤션 같아요 디바이스까지 후덜덜...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants