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

[정해찬] sprint5 #91

Conversation

just-codingbaby
Copy link
Collaborator

@just-codingbaby just-codingbaby commented Oct 27, 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을 만들어 필요한 곳에 활용해 보세요.
    중고마켓 페이지

  • 중고 마켓의 카드 컴포넌트 반응형 기준은 다음과 같습니다.
    베스트 상품
    Desktop : 4열
    Tablet : 2열
    Mobile : 1열
    전체 상품
    Desktop : 5열
    Tablet : 3열
    Mobile : 2열

  • 반응형에 따른 페이지 네이션 기능을 구현합니다.

  • 반응형으로 보여지는 물품들의 개수를 다르게 설정할때 서버에 보내는 pageSize값을 적절하게 설정합니다.

멘토에게

  • 푸터, 페이지네이션, 검색기능은 아직 구현하지 못했지만 일단 제출했습니다
  • select를 통해서 최신순, 좋아요순을 선택할 수 있게 하였는데 드롭다운이 예시사진처럼 보이게 하려면 어떻게 해야 하는지 궁금합니다

@just-codingbaby just-codingbaby added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 완성은 아니지만 제출합니다... labels Oct 27, 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.

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

node_module 같은 경우는 커밋에서 제외시켜 주시는게 좋습니다. gitignore를 이용해 보시는걸 추천드립니다.

}

export async function getArticleList(keyword) {
return apiRequest('GET', ARTICLE_BASE_URL, {},{page:'1',pageSize:'100',keyword});

Choose a reason for hiding this comment

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

사소한 부분일 수도 있습니다만 page와 pageSize는 숫자(int)일 가능성이 높기에 문자열 처리를 하지 않는 편이 더 명확할 것 같습니다

Choose a reason for hiding this comment

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

gitignore는 협업 과정에서 중요한 설정 중 하나입니다. 프로젝트에 맞는 gitignore 설정 방법을 공부하시면 도움이 될 것 같습니다.

참고

function(error) {
if(error.response) {
console.log('Request Interceptor 에러 발생: ',error.response.status);
return error;

Choose a reason for hiding this comment

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

에러가 발생했을 때는 대응할 수 있도록 코드가 작성되어야 합니다. 지금처럼 error를 반환할 경우 각 코드에서 일일히 에러 대응을 해야하는 등의 코드 중복이 발생할 수 있으며 심지어 정상응답처럼 코드가 동작하여 예기치 못한 상황이 발생할 수도 있습니다.
interceptors를 통해 일괄적으로 관리하는 방향으로 선택하셨다면 에러도 해당 코드 안에서 처리하는 방법을 고민해 보시는 것도 좋을 것 같습니다.

@@ -0,0 +1,56 @@
import axios from "axios";

const ARTICLE_BASE_URL = 'https://sprint-mission-api.vercel.app/articles';

Choose a reason for hiding this comment

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

product url 과 main 도메인은 같고, path만 다른 것으로 보입니다. 이런 경우 별도의 파일로 분리하여 관리하는 방법도 생각해 볼 수 있을 것 같습니다.

const {id, name, description, price, images, favoriteCount, createdAt, updatedAt} = item;

return (
<div key={id} className={label === '베스트 상품' ? 'favoriteProductItem' : 'sortedProductItem'} >

Choose a reason for hiding this comment

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

key는 컴포넌트 안에서 처리하는 것 보다 외부에서 주입하는 것이 좋습니다. ProductList의 map에서 key={item.id} 와 같은 형식으로 사용해 보시는건 어떨까요

</div>
</div>)
}
<div className={label === '베스트 상품' ? 'favoriteProductList' : 'sortedProductList'}>

Choose a reason for hiding this comment

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

"베스트 상품" 이라는 변수가 세 번 정도 사용되었는데 하드 코딩 보단 관리 가능한 변수로 분리하여 사용하시는게 재사용성과 유지 보수 측면에서 좋다고 생각됩니다.

Comment on lines +36 to +39
<select className='sortedSelect' onChange={handleSortChange}>
<option value="recent">최신순</option>
<option value="favorite">좋아요순</option>
</select>

Choose a reason for hiding this comment

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

피그마를 보았을 때 기본 CSS 구현 보다는 라이브러리를 고려한 디자인으로 추측됩니다. 이 부분은 직접 구현 보다는 라이브러리를 사용한다고 생각하시면 좋을 것 같습니다.

참고

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

좋은 정보 감사합니다. 미션6 끝나는 대로 부족한 부분들 수정하도록 하겠습니다

import { useState } from 'react';


function ProductItem({ item , label }) {

Choose a reason for hiding this comment

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

ProductItem은 ProducList와 다른 역할을 하는 컴포넌트로 별도의 파일로 분리해 주시는게 좋습니다.

@coldplay126 coldplay126 merged commit b33b11b into codeit-sprint-fullstack:react-정해찬 Oct 29, 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