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 #167

Conversation

jaewan0
Copy link
Collaborator

@jaewan0 jaewan0 commented Jun 21, 2024

요구사항

기본

중고마켓

  • 중고마켓 페이지 주소는 “/items” 입니다.
  • 페이지 주소가 “/items” 일때 상단네비게이션바의 '중고마켓' 버튼의 색상은 “3692FF”입니다.
  • 상단 네비게이션 바는 이전 미션에서 구현한 랜딩 페이지와 동일한 스타일로 만들어 주세요.
  • 상품 데이터 정보는 https://panda-market-api.vercel.app/docs/#/ 에 명세된 GET 메소드 “/products” 를 사용해주세요.
  • '상품 등록하기' 버튼을 누르면 “/additem” 로 이동합니다. ( 빈 페이지 )
  • 전체 상품에서 드롭 다운으로 “최신 순” 또는 “좋아요 순”을 선택해서 정렬을 할 수 있습니다.

중고마켓 반응형

  • 베스트 상품
  • Desktop : 4개 보이기
  • Tablet : 2개 보이기
  • Mobile : 1개 보이기
  • 전체 상품
  • Desktop : 12개 보이기
  • Tablet : 6개 보이기
  • Mobile : 4개 보이기

심화

  • 페이지 네이션 기능을 구현합니다.

주요 변경사항

  • 첫 리액트 도입

멘토에게

  • 제출이 늦어져서 죄송합니다... 미완성본이라도 올려보겠습니다.

@jaewan0 jaewan0 requested a review from arthurkimdev June 21, 2024 18:19
@jaewan0 jaewan0 added the 미완성🫠 죄송합니다.. label Jun 21, 2024
@jaewan0 jaewan0 changed the base branch from main to React-이재완 June 21, 2024 18:20
Copy link
Collaborator

@arthurkimdev arthurkimdev left a comment

Choose a reason for hiding this comment

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

재완님 과제 제출하시느라 수고 많으셨습니다! 🙏

@@ -1,43 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<html lang="ko">
Copy link
Collaborator

Choose a reason for hiding this comment

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

리뷰 반영 굳! 👍

Comment on lines +6 to +22
async function getData() {
const url = "https://panda-market-api.vercel.app/products";
const response = await fetch(url);
const result = await response.json();

const data = result.list.map((items) => ({
id: items.id,
title: items.name,
description: items.description,
price: items.price,
image: items.images,
favoriteCount: items.favoriteCount,
createAt: items.createAt,
}));

return data;
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 부분은 별도의 파일로 분리가 되면 좋겠어요! 예를들어 getData.js 을 아래 처럼 별도의 모듈로 만들어서 사용하는 방법은 확장성이나 유지보수에도 더 좋은 장점이 있어요.

const BASE_URL = 'https://panda-market-api.vercel.app';

export async function getData(orderBy, page, pageSize) {
  const query = `orderBy=${orderBy}&page=${page}&pageSize=${pageSize}`;
  const url = `${BASE_URL}/products?${query}`;

  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error('Failed to fetch products');
    }
    const body = await response.json();
    return body.list.map((item) => ({
      id: item.id,
      title: item.name,
      description: item.description,
      price: item.price,
      image: item.images,
      favoriteCount: item.favoriteCount,
      createAt: item.createAt,
    }));
  } catch (error) {
    console.error('Error message');
    throw error;
  }
}

Comment on lines +27 to +29
<li key={items.id}>
<ProductListItem item={item} />
</li>
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기 key 값이 items.id가 아니라 item.id가 되어야해요. 각 고유한 id값을 주어야 하거든요.

Comment on lines +4 to +28
function AllProductList({ items }) {
return (
<div className="all-product-list">
<div className="label">
<div className="label-title">전체 상품</div>
<div className="label-inputs">
<input
className="search-input"
type="text"
placeholder="검색할 상품을 입력해주세요"
></input>
<button className="product-add-button">상품 등록하기</button>
<select className="order-dropdown" name="order" id="order">
<option value="createAt" selected>
최신순
</option>
<option value="rating">좋아요순</option>
</select>
</div>
</div>
<ul className="items">
{items.map((item) => {
return (
<li key={items.id}>
<ProductListItem item={item} />
Copy link
Collaborator

Choose a reason for hiding this comment

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

단순 UI를 표현하는 컴포넌트를 잘 만들어주셨습니다! 👍

Comment on lines +3 to +13
function Menu({ className, name, href }) {
const classNames = `Menu ${className}`;
return (
<div className="Menu-wrapper">
<a className={classNames} href={href}>
{name}
</a>
</div>
);
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

여기 Menu 컴포넌트도 headless UI 처럼 잘만들어주셨어요! 👍

@arthurkimdev
Copy link
Collaborator

첫 리액트 도입인데, 훌륭하게 잘해주셨어요. 다음번 과제도 지금처럼 headless UI를 잘 활용해주시는 방향으로 화이팅입니다! 💪

@arthurkimdev arthurkimdev merged commit 5b43758 into codeit-bootcamp-frontend:React-이재완 Jun 23, 2024
@arthurkimdev
Copy link
Collaborator

이제는 git 충돌 안나게 잘해주셨네요!

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.

4 participants