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

[전소은]19주차 과제 업로드 #437

Open
wants to merge 1 commit into
base: part3-전소은
Choose a base branch
from

Conversation

sobokki
Copy link
Collaborator

@sobokki sobokki commented Feb 26, 2024

요구사항

기본

-[][프로젝트 전반] https://bootcamp-api.codeit.kr/docs/linkbrary/v1 문서를 참고해 https://bootcamp-api.codeit.kr/api/linkbrary/v1 api를 활용했나요?
https://docs.github.com/articles/github-community-guidelines

-[x][프로젝트 전반] api 요청에 TanStack React Query를 활용했나요?

-[x][로그인, 회원가입 페이지] 로그인은 POST ‘/auth/sign-in’ 을 활용했나요?

-[x][로그인, 회원가입 페이지] 회원가입은 POST ‘/auth/sign-up’ 을 활용했나요?

-[x][로그인, 회원가입 페이지] 이메일 중복확인은 POST ‘/users/check-email’ 을 활용했나요?

-[][링크 공유 페이지] 폴더의 정보는 GET ‘/folders/{folderId}’, 폴더 소유자의 정보는 GET ‘/users/{userId}’를 활용했나요?

-[][링크 공유 페이지] 폴더의 링크 데이터는 GET ‘/folders/{folderId}/links’ 를 활용했나요?

-[][링크 공유 페이지] 유효한 access token이 있는 경우 GET ‘/users’ 로 현재 로그인한 유저 정보를 받아 상단 네비게이션 유저 프로필을 보여 주나요?

-[x][링크 공유 페이지] 유효한 access token이 없는 경우 “로그인” 버튼을 보여 주나요?

-[][폴더 페이지] 폴더 페이지에서 현재 유저의 폴더 목록 데이터는 GET ‘/folders’ 를 활용했나요?

-[][폴더 페이지] 폴더 페이지에서 전체 링크 데이터를 받아올 때 GET ‘/links’, 특정 폴더의 링크를 받아올 때 GET ‘/folders/{folderId}/links’를 활용했나요?

-[][모달] 폴더 이름 변경은 ‘PUT /folders/{folderId}’를 활용했나요?

-[][모달] 폴더 생성은 ‘POST /folders’를 활용했나요?

-[][모달] 폴더 삭제는 ‘DELETE /folders/{folderId}’를 활용했나요?

-[][모달] 링크 삭제는 ‘DELETE /links/{linkId}’를 활용했나요?

-[][모달] 링크 생성은 ‘POST /links’를 활용했나요?

주요 변경사항

스크린샷

image

멘토에게

  • 로그인, 회원가입 페이지만 잘 만들어져 있고 나머지는 잘 되어 있지 않습니다( 날려버렸어요..)
    -기능 구현이라도 하려고 했지만, 유효한 엑세스 토큰 받아오는 법을 잘 모르겠습니다.
    -추후 부족한 부분은 추가해 나가보겠습니다.
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@sobokki sobokki requested review from lunaticscode and ys1008p and removed request for ys1008p February 26, 2024 01:23
@sobokki sobokki added bug Something isn't working 미완성 죄송합니다... 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 순한맛🐏 마음이 많이 여립니다... labels Feb 26, 2024

return (
<>
const Input = ({
Copy link
Collaborator

Choose a reason for hiding this comment

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

컴포넌트를 만들 때, 아래의 요구사항같이 외부에서 해당 Input의 Native 이벤트를 핸들링할 수 있도록 만드는 것이 좋습니다.

(ex. 회원가입 폼에서 validation(유효성 검증)을 통과하지 못한 경우, Input을 강제 포커스)

forwardRef 를 꼭 찾아보시고 적용해주세요.

height={100}
/>
</div>
{userProfile ? (
<div className={styles["profile-layout"]}>
Copy link
Collaborator

Choose a reason for hiding this comment

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

userProfile이 유효할 때 렌더링되는 html 엘리먼트들은 별도의 컴포넌트로 생성해주세요.

const UserInfo = () => {
  return ( 
    <div>....</div>
  )
}

const Nav = () => {
   return (
       { userProfile && <UserInfo/> }
   )
}


console.log("config:", config); // config 확인

const response = await axios.get(`${BASE_URL}/users/{userId}`, config);
Copy link
Collaborator

Choose a reason for hiding this comment

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

axois는 기본적으로 공통 파일을 하나 만들고, 해당 파일의 axios instance를 호출해서 쓰는 것이 일반적입니다.

// ./utils/api.js
import axios from 'axios';
axios.defaults.baseUrl = "http://localhost:5000";
export const api = axios.create();


useEffect(() => {
// 사용자 프로필을 가져오는 비동기 함수 호출
async function getUserProfile() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

useEffect 내부는 항상 간결하게 작성하는 것이 좋습니다.

const getUserProfile = async () => {
   // .....
}

useEffect( () => {
   getUserProfile();
}, [])

watch,
formState: { isSubmitting, errors },
} = useForm({ mode: "onBlur" });
const watchEmail = watch("email", "");
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에서 register를 사용하게되면 Uncontrolled 상태로 폼들이 관리됩니다. 그렇게되면 사용자 입력에 따른 리렌더링이 일어나지 않게 되죠. 그런데 watch, setValue 를 사용하는 순간 Controlled 상태로 다시 전환되며 사용자가 입력을 할 때마다 리렌더링이 일어나게 되면서 성능적인 부분에서 손해를 보게됩니다.

react-hook-form 을 사용할 때는 Uncontrolled, Controlled를 선택하는 기준이 중요합니다. (굳이 Controlled 상태를 유지할 필요 없는 경우 watch, setValue는 사용할 필요없습니다.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성 죄송합니다... 순한맛🐏 마음이 많이 여립니다...
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants