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

[김영주] Sprint8 #255

Conversation

purplenib
Copy link
Collaborator

@purplenib purplenib commented Aug 2, 2024

요구사항

  • Github에 PR(Pull Request)을 만들어서 미션을 제출합니다.
  • 피그마 디자인에 맞게 페이지를 만들어 주세요.
  • Typescript를 사용합니다.

기본

  • [] 스프린트 미션 1 ~ 7에 대해 typescript를 적용해주세요.

주요 변경사항

  • 테일윈드 css 설치 후 테일윈드로 변환하는 작업 중
  • DTO 추가

스크린샷

image


멘토에게

  • part3 동안 잘부탁드립니다 멘토님! 🙏
  • 미션 1 ~ 4는 아직 완성하지 못했습니다.
  • 파일과 폴더 구조를 어떤 식으로 변경하면 좋을지 확인 부탁드립니다!

@purplenib purplenib added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Aug 2, 2024
@purplenib purplenib requested a review from Taero-Kim August 2, 2024 17:00
@purplenib purplenib assigned purplenib and unassigned Taero-Kim Aug 2, 2024
@purplenib purplenib added the 미완성🫠 죄송합니다.. label Aug 3, 2024
@Taero-Kim Taero-Kim self-assigned this Aug 3, 2024
<Route path="/Items" element={<Items />} />
<Route path="/Items/:productId" element={<ItemInfo />} />
<Route path="/AddItem" element={<AddItem />} />
<Route path="/Community" element={<Community />} />
Copy link
Collaborator

Choose a reason for hiding this comment

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

p4;
크리티컬한 부분은 아니지만, �경로 부분은 소문자로 사용하는게 일반적입니다!
대문자가 유효하지 않은 건 아니지만, 특히 협업하는 경우에 혼란이 발생할 수도 있고
사용자경험 측면에서도, 소문자로 일관성을 유지하는게 좋은 것 같습니다!

이미 프로젝트 전반에 적용하셨으니, 지금 당장 수정하실 필요는 없지만 참고하시라고 말씀드립니다!

const file = eventObject.target.files[0];
const handleImageChange = (e: ChangeEvent<HTMLInputElement>) => {
if (e && e.target && e.target.files) {
const file = e.target.files[0];
Copy link
Collaborator

Choose a reason for hiding this comment

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

p4;
이렇게 보수적으로 조건을 작성하셔도 좋습니다!
다만, ChangeEvent 객체에서 e.target은 항상 존재하므로 아래와 같이 간결하게 적어도 괜찮을 것 같아요!

  const handleImageChange = (e: ChangeEvent<HTMLInputElement>) => {
    const file = e.target.files ? e.target.files[0] : null;
    onImageChange(file);
  };

</li>
<li>
<Link
to="/Items"
Copy link
Collaborator

Choose a reason for hiding this comment

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

p4;
경로를 상수화해서 프로젝트 전반에서 사용해도 좋을 것 같아요!
ex)

export const ROUTES = {
  HOME: "/",
  SIGN_IN: "/Signin",
  COMMUNITY: "/Community",
  ITEMS: "/iItems",
  ITEM_INFO: (productId: string) => `/items/${productId}`,
};

{ list: [], totalCount: 0 }
);

const { list = [], totalCount = 0 } = data || {};
Copy link
Collaborator

Choose a reason for hiding this comment

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

p5;
보수적으로 data가 null이거나 undefined인 상황을 대비해 기본값을 설정하신 것 좋습니다!
다만, 이미 useFecth에 initialValue를 전달하고 있어서, 폴백 객체를 설정하지 않으셔도 무방할 것 같아요!

p4;
이왕이면 조금 더 직관적으로 어떤 list인지 이름을 변경해 사용하면 더 좋을 것 같아요!

const { list:productList = [], totalCount: productTotalCount = 0 } = productResponseData;

return () => {
window.removeEventListener("resize", handleResize);
};
}, [pageSize]);
Copy link
Collaborator

Choose a reason for hiding this comment

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

p4;
handleResize 함수를 effect 내부로 옮기거나, useCallback으로 감싸 useEffect 의존성에 hnadleResize를 지정하면 좋을 것 같아요!


const navigate = useNavigate();

const comments: CommentResponse[] = Array.isArray(commentsData)
Copy link
Collaborator

Choose a reason for hiding this comment

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

p4;
이것도 useFetch 호출시에 initial_comments로 상태를 초기화 시켜주고 있으니, 생략해도 괜찮을 것 같아요!
�혹시나 comments가 null이나 undefined가 되는 상황이 생겨, 런타임 에러가 발생하는걸 방지하고 싶다면
아래 렌더링 하는 부분에 옵셔널 체이닝으로 map을 돌리면 좋을 것 같아요!

  const comments = Array.isArray(commentsData)
    ? commentsData
    : [];  제거

return (
   ...
   {commentsData?.map(...)}
)

declare module "*.svg" {
const value: string;
export default value;
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이미지 파일을 모듈로 인식하도록 잘 설정하셨습니다!
이렇게 하면 이미지를 모듈로 임포트하여 직관적인 사용이 가능해 좋은 방식이에요!

const isValid =
Boolean(itemName) &&
Boolean(itemDescription) &&
Boolean(itemPrice) &&
Copy link
Collaborator

Choose a reason for hiding this comment

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

p5;
불리언임을 명확하게 보여주어 이런 방식도 좋지만, 간결성 측면에서는 두번의 NOT연산을 붙여 값을 불리언 타입으로 변환하는 것도 좋습니다!

    const isValid =
      !!itemName &&
      !!itemDescription &&
      !!itemPrice &&
      itemTags.length > 0;

banner: "#cfe5ff",
},
},
},
Copy link
Collaborator

Choose a reason for hiding this comment

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

tailwind의 테마를 잘 확장하여 사용하셨습니다!

autoprefixer: {},
},
],
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

기타)
나중에 팀 프로젝트에서 tailwind를 사용하게 된다면, 자동으로 class 순서를 포매팅해주는 플러그인 도입도 고민해보세요!
https://tailwindcss.com/blog/automatic-class-sorting-with-prettier

@Taero-Kim
Copy link
Collaborator

파일과 폴더 구조를 어떤 식으로 변경하면 좋을지 확인 부탁드립니다!

폴더 구조는 나쁘지 않은 것 같습니다. page 폴더에 각 페이지에 대응하는 컴포넌트를 잘 대응 시켜서 명확하게 페이지 컴포넌트를 표시하셨고,
components에서는 각 페이지 별로 사용되는 컴포넌트를 폴더화하여 잘 구분 하신 것 같아요!
Header 같은 경우에는 Layout도 좋지만, common이라는 폴더를 상위에 하나 더 두어 사용하셔도 괜찮을 것 같습니다.

조금 더 사족을 붙이자면, hooks나 utils도 사용되는 페이지에 따라 폴더로 구분하고 공통으로 사용되는 것들은 common에 구분하여도 좋을 것 같습니다!

@Taero-Kim
Copy link
Collaborator

전반적으로 타입 정의도 잘하시고, tailwind 적용 및 기타 컴포넌트 작성도 잘 하신 것 같아요!

코드를 보면서 최대한 타입스크립트를 중심으로 개선되면 좋을 만한 것들에 대해 리뷰를 남겼어요!
당연히 리뷰는 꼭 수정하실 필요 없으시고, 참고만 하셔도 좋습니다.

+) 리뷰를 남긴 코멘트 위의 p(1~5); 마크의 의미는 아래와 같습니다! 참고하면 좋을 것 같아요!

p1; 꼭 반영해주세요 (Request changes)
리뷰어는 PR의 내용이 서비스에 중대한 오류를 발생할 수 있는 가능성을 잠재하고 있는 등 중대한 코드 수정이 반드시 필요하다고 판단되는 경우, P1 태그를 통해 리뷰 요청자에게 수정을 요청합니다. 리뷰 요청자는 p1 태그에 대해 리뷰어의 요청을 반영하거나, 반영할 수 없는 합리적인 의견을 통해 리뷰어를 설득할 수 있어야 합니다.

p2; 적극적으로 고려해주세요 (Request changes)
작성자는 P2에 대해 수용하거나 만약 수용할 수 없는 상황이라면 적합한 의견을 들어 토론할 것을 권장합니다.

p3; 웬만하면 반영해 주세요 (Comment)
작성자는 P3에 대해 수용하거나 만약 수용할 수 없는 상황이라면 반영할 수 없는 이유를 들어 설명하거나 다음에 반영할 계획을 명시적으로(JIRA 티켓 등으로) 표현할 것을 권장합니다. Request changes 가 아닌 Comment 와 함께 사용됩니다.

p4; 반영해도 좋고 넘어가도 좋습니다 (Approve)
작성자는 P4에 대해서는 아무런 의견을 달지 않고 무시해도 괜찮습니다. 해당 의견을 반영하는 게 좋을지 고민해 보는 정도면 충분합니다.

p5; 그냥 사소한 의견입니다 (Approve)
작성자는 P5에 대해 아무런 의견을 달지 않고 무시해도 괜찮습니다.

@purplenib purplenib changed the title [김영주] sprint8 [김영주] Sprint8 Aug 5, 2024
@Taero-Kim Taero-Kim merged commit 77ccd30 into codeit-bootcamp-frontend:React-김영주 Aug 5, 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