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

Conversation

MELATONIN99
Copy link
Collaborator

@MELATONIN99 MELATONIN99 commented Jun 21, 2024

요구사항

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

기본

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

반응형

베스트상품

  • Desktop : 4개 보이기
  • Tablet : 2개 보이기
  • Mobile : 1개 보이기

전체 상품

  • Desktop : 10개 보이기
  • Tablet : 6개 보이기
  • Mobile : 4개 보이기

심화

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

주요 변경사항

  • UI 먼저 작업하였습니다, 반응형으로 잘 작동합니다.
  • 각종 버튼들 UI는 작동하지만 기능은 추가 중입니다.
  • 아직 테스트 중이기 때문에 구분을 위해 아이템 이미지의 약간의 색상을 부여했습니다.

스크린샷

  • 작업 중이기에 가시성을 위해 이미지의 색상을 바꾸었습니다.

멘토에게

  • 심화에서 페이지 네이션 기능을 구현하라 했는데, 페이지의 크기에 따라 데이터를 매번 새로 받아오라는 말 같은데
    그래도 진행하는 게 맞을까요?
  • 아직 Styled- componend 까지 진도가 나가지 않아 우선 JS와 CSS로 구현 중인데, 파일구조가 생각보다 어지러운 것 같습니다
    어떤 식으로 개선하는 게 좋을까요?
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

hanseulhee and others added 8 commits October 10, 2023 14:15
…ithub-actions

[Fix] delete merged branch github action
* 초기 빌드 파일입니다 JS에서 React로 마이그레이션 중입니다.

* Sprint-Mission5 내용에 따라 중고마켓 페이지 구현 중입니다.

* 중고마켓 페이지 UI만 구현, 반응형 웹으로 제작되었습니다.

* UI에 맞게 기능이 추가되지 않아  추후에 추가 예정입니다.
@MELATONIN99 MELATONIN99 requested a review from lisarnjs June 21, 2024 15:30
@MELATONIN99 MELATONIN99 added 미완성🫠 죄송합니다.. 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. labels Jun 21, 2024
* 최신순, 좋아요 순으로 판매 중인 상품 정렬기능을 추가하였습니다.
Copy link
Collaborator

@lisarnjs lisarnjs left a comment

Choose a reason for hiding this comment

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

다양한 css 도구들을 배우면 더 편하게 스타일링할 수 있을거지만!
일단 그걸 떠나서 폴더 구조에 대한 고민이 있을 거 같아서 아티클 하나 가져왔어요
폴더 구조에 정답은 없지만 대부분 사람들이 짜는 폴더 구조에서 내가 사용할 폴더들만 가져와서 사용하기때문에 이 아티클 외에도 다른 사람들은 어떻게 폴더를 구성하는지 살펴보고 가장 맘에 드는 것, 혹은 사람들이 가장 많이 쓰는 방법을 선택해서 적용해보세요!

https://velog.io/@bjgeumgang/React%EC%9D%98-%ED%8F%B4%EB%8D%94%EA%B5%AC%EC%A1%B0

페이지네이션 기능은 다음 페이지를 불러올 수 있는 기능을 만들어라 라는 뜻이고,
불러올 페이지가 바뀌면 해당 페이지에 맞는 데이터를 불러와야하기 때문에
새로운 데이터를 추가로 받아오는 작업이 필요합니다!

이번 미션도 고생 많으셨어요!
이번주도 화이팅입니다 👍

Copy link
Collaborator

Choose a reason for hiding this comment

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

BestItem 폴더 안에 UI를 그리는 js 파일 하나랑 스타일을 위한 css 파일 하나로 나뉘어져 있는데 요건 css module 방식과 비슷해보이네요!
각 페이지 or 컴포넌트 별 css를 나눠서 작업하는 것도 아주 좋은 방법입니다
css module에 대해 못 들어보셨을 수 있을 것 같아서 아티클도 같이 첨부해드릴게요!
https://react.vlpt.us/styling/02-css-module.html


function BestItemList({ items }) {
// 반응형에 따라 몇 개의 데이터를 표시할 건지 후에 수정해야 함.
const cutItems = [...items.list].slice(0, 4);
Copy link
Collaborator

Choose a reason for hiding this comment

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

반응형에 따라 불러와지는 데이터가 다르다면 처음 화면이 그려졌을 때 화면 크기를 판단하는 로직이 필요할 것 같네요!

console.log(props.orderBy);
const nowType = props.orderBy;
const [isOpen, setIsOpen] = useState(false);
const [select, setSelect] = useState(`${nowType}`);
Copy link
Collaborator

Choose a reason for hiding this comment

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

useState(nowType) 으로 적어줘도 무방합니다!

import { useState } from 'react';
import '../DropDown/DropDown.css';

export default function DropDown(props) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

props 부분도 객체구조로 가져오셔도 좋아요!

// example
export default function DropDown({orderBy, handleOrderChange}) {
  const nowType = orderBy;
  ...
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

BestItem이랑 코드 구조가 비슷해요!
혹시 둘을 하나로 합칠 수는 없을까요? 한번 합칠 수 없는지 고민해보세요!
(고민해봤는데 어렵다면 일단 패쓰하세요 이건 리액트에 익숙해져야 생각할 수 있는 부분이에요!)

}, []);

return (
<div className="pagiation-bar">
Copy link
Collaborator

Choose a reason for hiding this comment

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

className={exampleState ? 'pagination-bar' : 'bar-pagination'}처럼 리액트에서는 클래스명에서도 변수들을 사용할수 있으니 참고해보세용 👍

const $target = e.target;
if ($target.tagName !== 'LI') return;
if (navClick !== $target) {
navClick.classList.remove('pagiation-target');
Copy link
Collaborator

Choose a reason for hiding this comment

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

앞으로는 직접적인 dom을 건드리는 일은 줄어들거에요!
ref 사용이라던지, 클리스명을 추가하고 지운다던지 등등..
리액트에서 useState로 만드는 변수들로 활용하는 연습을 더 해보는걸로!

const [Bestitems, setBestItems] = useState([]);
const [items, setItems] = useState([]);
const [orderBy, setOrderBy] = useState('recent');
const handleOrderChange = async (order) => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

오 try catch 너무 좋아요 ! try catch문은 에러가 나면 잡아주기 때문에 안전성을 보장해줍니다

* useState값에 불필요한 값 삭제

* DropDown버튼의 이름을 props로 받아온 값을 참조하여 표시되게 변경
* props를 객체 구조로 가져와 코드의 가독성과 유연성을 고려하였습니다.
@lisarnjs lisarnjs merged commit d8733c4 into codeit-bootcamp-frontend:React-염성진 Jun 24, 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.

4 participants