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

[조혜진] Week15 #483

Conversation

MEGUMMY1
Copy link
Collaborator

요구사항

기본

  • 링크 공유 페이지의 url path를 ‘/shared/{folderId}’로 변경하고, {folderId}에 해당하는 폴더 데이터가 화면에 보이게 해주세요.
  • 폴더 페이지의 url path를 전체 링크를 보는 경우 ‘/folder’로, 특정 폴더를 보는 경우 ‘/folder/{folderId}’로 변경하고, {folderId}에 해당하는 폴더 데이터가 화면에 보이게 해주세요.
  • https://bootcamp-api.codeit.kr/docs 에서 인증이 필요한(자물쇠 아이콘이 있음) api의 경우 Authorization 리퀘스트 헤더에 “Bearer {accessToken}”을 함께 보내야 합니다.
  • Github에 위클리 미션 PR을 만들어 주세요.
  • React, Next.js를 사용해 진행합니다.

심화

  • 리퀘스트 헤더에 인증 토큰을 첨부할 때 axios interceptors를 활용해 주세요. (axios를 사용하지 않는다면 이와 유사한 기능을 활용해 주세요.)

주요 변경사항

  • User 토큰 연결
  • API 수정

스크린샷

image
image
image

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@MEGUMMY1 MEGUMMY1 requested a review from choinashil May 27, 2024 10:10
@MEGUMMY1 MEGUMMY1 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label May 27, 2024
@MEGUMMY1
Copy link
Collaborator Author

Copy link
Collaborator

@choinashil choinashil left a comment

Choose a reason for hiding this comment

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

혜진님 15주차 미션도 수고많으셨습니다 👍🏽
시간 추가로 내셔서 리액트로 바꾸지 못한 부분도 바꿔보시고
기존 리뷰에 코멘트 달아드렸던 부분들이나 멘토링 때 알려드린 것들도 꼼꼼히 적용해보시면 좋을 것 같아요!

{folderList &&
folderList.data.map((folder: Link) => (
{folders &&
folders.map((folder: any) => (
Copy link
Collaborator

Choose a reason for hiding this comment

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

any 말고 유효한 타입으로 정의해주세요! 이 부분은 충분히 넣어줄 수 있는 부분 같아보이네요 👀

const folderData = useFetch(`${BASE_URL}folders/${folderId}`);

useEffect(() => {
if (folderData && folderData.data && folderData.data.length > 0) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

옵셔널체이닝(?) 사용해서 개선할 수 있겠네요

Suggested change
if (folderData && folderData.data && folderData.data.length > 0) {
if (folderData?.data?.length > 0) {

@@ -21,78 +23,211 @@ export interface Folder extends Card {
};
}

export function useSharedData() {
const [data, setData] = useState<Card[]>([]);
export function useFolderInfo(folderId: string) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

보통 하나의 파일 안에 하나의 커스텀훅을 둡니다
파일 별로 찢어보면 좋을 것 같아요

if (linksData) {
const parsedData = linksData.data.map((link: Card) => ({
if (folderData && folderData.data) {
const parsedData = folderData.data.map((link: any) => ({
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기도 any 대신 타입 넣어주세요!

Comment on lines +62 to +63
showDot: false,
showStar: false,
Copy link
Collaborator

Choose a reason for hiding this comment

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

멘토링 때 설명드린대로 boolean 형 변수네이밍 변경해보면 좋을 것 같습니다!


const linksData = useFetch(`${BASE_URL}users/1/links?folderId=${folderId}`);
export function useUserData() {
const [userData, setUserData] = useState<any>(null);
Copy link
Collaborator

Choose a reason for hiding this comment

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

전반적으로 타입 정의하는 곳에 any 가 많군요! 혜진님 충분히 하실 수 있을 만한 부분이라고 생각되니 개선 부탁드려요!

Comment on lines +116 to +128
try {
const accessToken = localStorage.getItem("accessToken");
if (!accessToken) return;

const response = await fetch(`${BASE_URL}links`, {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});

if (!response.ok) {
throw new Error("Failed to fetch user links");
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 부분 + 144~146라인까지 반복되는 코드들을 어떻게 개선할 수 있을지도 고민해보시면 좋을 것 같습니당

return data;
} catch (error) {
throw new Error(`Error login: `);
throw new Error(`Error login`);
Copy link
Collaborator

Choose a reason for hiding this comment

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

문자열 내부에서 변수 활용이 없는 경우는 백틱(`) 대신 작은 따옴표(') 를 사용합니다


export const useFetchUser = () => {
const [data, setData] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
Copy link
Collaborator

Choose a reason for hiding this comment

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

초기값은 false 로 두는게 자연스러운 것 같아요!

Comment on lines +11 to +13
// folderId가 문자열 | undefined일 경우 첫번째 문자열을 선택
const folderIdString =
typeof folderId === "string" ? folderId : Array.isArray(folderId) ? folderId[0] : undefined;
Copy link
Collaborator

Choose a reason for hiding this comment

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

query parameter 로 사용되는 forderId 가 명확하게 string 인 경우 저는 타입 단언으로 처리하기도 합니다

(사용처에서 forderId as string 과 같은 식으로 작성)

@choinashil choinashil merged commit f045490 into codeit-bootcamp-frontend:part3-조혜진 May 28, 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