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

[강수정] sprint 5 #98

Merged

Conversation

xcjnzvc
Copy link
Collaborator

@xcjnzvc xcjnzvc commented Oct 28, 2024

기본

  • Github에 스프린트 미션 PR을 만들어 주세요.
  • React를 사용해 진행합니다.

중고마켓 페이지

  • PC, Tablet, Mobile 디자인에 해당하는 중고마켓 페이지를 만들어 주세요.
  • 중고마켓 페이지 url path는 별도로 설정하지 않고, ‘/’에 보이도록 합니다.
  • 상품 데이터는 https://panda-market-api.vercel.app/docs/에 명세된 GET 메소드 “/products” 를 사용해주세요.
  • 상단 네비게이션 바, 푸터는 랜딩 페이지와 동일한 스타일과 규칙으로 만들어주세요.
  • 상품 데이터는 https://panda-market-api.vercel.app/docs/에 명세된 GET 메소드 “/products” 를 활용해주세요.
  • 상품 목록 페이지네이션 기능을 구현합니다.
  • 드롭 다운으로 “최신 순” 또는 “좋아요 순”을 선택해서 정렬을 구현하세요.
  • 상품 목록 검색 기능을 구현합니다.
  • 베스트 상품 데이터는 https://panda-market-api.vercel.app/docs/에 명세된 GET 메소드 “/products”의 정렬 기준 favorite을 사용해주세요.

심화

  • 커스텀 hook을 만들어 필요한 곳에 활용해 보세요.

중고마켓 페이지

  • 중고 마켓의 카드 컴포넌트 반응형 기준은 다음과 같습니다

멘토님께

  • 구현 못한 부분들은 꾸준히 추가시키겠습니다.

@xcjnzvc xcjnzvc requested a review from coldplay126 October 28, 2024 14:02
@xcjnzvc xcjnzvc added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 완성은 아니지만 제출합니다... 제출일 이후 제출한PR 제출 마감일(일요일) 이후에 제출하는 PR입니다. 진행 중 🏃 스프린트 미션 진행중입니다. labels Oct 28, 2024
@xcjnzvc xcjnzvc changed the title React 강수정 5 [강수정] sprint 5 Oct 28, 2024
Copy link

@coldplay126 coldplay126 left a comment

Choose a reason for hiding this comment

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

과제 작성하시느라 고생 많으셨습니다!

Choose a reason for hiding this comment

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

해당 파일은 Mac 색인 파일로 과제나 프로젝트에 필요치 않은 파일입니다. gitignore를 통해 커밋에서 제외해 보시는건 어떨까요?

Comment on lines +31 to +32
"https://thumbnail7.coupangcdn.com/thumbnails/remote/492x492ex/image/retail/images/2016/03/31/18/6/c21ad6ab-fbb0-445e-b0e6-248a46d9d84a.jpg";
}}

Choose a reason for hiding this comment

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

이미지가 없을 때 대체로 사용하는 파일은 통상적으로 동일한 이미지를 사용할 것이라 예상됩니다. 그렇다면 매 에러마다 이미지를 하드 코딩 하는 것 보다는 변수로 분리하여 재사용성을 높이는 방향으로 작업해 보시는 것도 도움이 될 것 같습니다!

Comment on lines +22 to +29
const settingProduct = async () => {
const data = await getProductsApi();
// console.log(data);
setProducts(data.list);
setTotalLength(data.totalCount / sellCount);
// 160 /10 = 16
};
settingProduct();

Choose a reason for hiding this comment

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

API 호출 로직이 컴포넌트 안에 있어 코드 가독성과 재사용성이 떨어집니다. 해당 호출을 별도의 함수로 분리하고, 컴포넌트 안에서는 함수를 호출하는 방식으로 작업해 보시는건 어떨까요?

Comment on lines +30 to +31
window.addEventListener("resize", () => {
setWinSize(window.innerWidth);

Choose a reason for hiding this comment

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

이처럼 window.addEventListener를 사용하면 컴포넌트가 리랜더링 될 때 마다 핸들러를 추가하여 성능 하락을 유발할 수 있습니다.
따라서 컴포넌트가 언마운트 될 때 클린업 함수를 추가해 주셔야 합니다.

참고

Comment on lines +34 to +36
const [startPage, setStartPage] = useState(1);
const [lastPage, setLastPage] = useState(5);
const [text, setText] = useState("");

Choose a reason for hiding this comment

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

개발팀의 컨벤션 마다 차이는 있지만 통상적으로 useState는 상단에 모아서 작성해 주시는 것이 가독성을 높여줍니다. 혹시 이처럼 중간에 작성하신 이유가 있는걸까요?

const [sellCount, setSellCount] = useState(10);
const [winSize, setWinSize] = useState(1920);

const arr = [];

Choose a reason for hiding this comment

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

arr은 이 배열이 어떤 역할을 하는지 전달하기에 적합한 변수명은 아닌 것 같습니다. 페이지네이션을 위한 배열로 추측되는데 pageNumbers와 같이 구체적인 변수명을 지어보는건 어떠실까요?

Comment on lines +38 to +40
for (let i = startPage; i <= lastPage; i++) {
arr.push(i);
}

Choose a reason for hiding this comment

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

페이지네이션을 UseEffect로 관리하면 페이지 변경 시 자동으로 번호를 갱신하고, 이로 인해 컴포넌트가 재랜더링 되므로 상태관리를 더욱 편하게 하실 수 있을 것 같습니다

Comment on lines +110 to +115
const settingItem = async () => {
const data = await getItemApi(page, sellCount, "recent");
// console.log("aaa", data);
setItem(data.list);
};
settingItem();

Choose a reason for hiding this comment

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

중복되는 로직으로 보입니다. 별도의 함수로 분리하여 컴포넌트에서 선언하는 형식으로 하신다면 재사용성과 유지보수 측면에서 더욱 좋을 것 같습니다.

Choose a reason for hiding this comment

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

전부 주석처리 되어 있는데 용도가 어떻게 될까요?

style={{
display: "flex",
flexDirection: "column",
...props,

Choose a reason for hiding this comment

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

props를 스타일에 직접 주입하는것은 위험합니다. style에서 사용할 수 없는 props가 넘어올 경우 에러가 발생할수도 있습니다. 만일 syle을 확장할 의도라면 props.style과 같은 매개변수를 이용하고, rest arg는 div에 주입하는 것이 안전합니다.

또한 CSS 를 별도로 관리하고 있기에 해당 스타일도 CSS 모듈을 사용하시는 것이 일관성 있는 관리 방식이 될거라 생각합니다.

@coldplay126 coldplay126 merged commit b10fbc3 into codeit-sprint-fullstack:react-강수정 Oct 30, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 완성은 아니지만 제출합니다... 제출일 이후 제출한PR 제출 마감일(일요일) 이후에 제출하는 PR입니다. 진행 중 🏃 스프린트 미션 진행중입니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants