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

Conversation

Jaeheon96
Copy link
Collaborator

@Jaeheon96 Jaeheon96 commented Jun 21, 2024

요구사항

기본

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

심화

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

주요 변경사항

  • 검색기능 구현

멘토에게

  • 반응형은 어떻게 해야할지 전혀 모르겠어서 구현하지 못했습니다... 찾아보니 styled component 활용한다는 것 같던데 다른 방법도 있나요?
  • 구현에 급급해 가독성 등 코드가 조잡합니다. 아낌없는 피드백 부탁드립니다.
  • 배포를 못했습니다. 찾아보니 netlify는 백엔드 단에 리퀘스트 보내는게 안된다고 하고 AWS는 1년 까먹고 있으면 돈 받아간다길래 못했습니다.
  • build 결과물은 원래 git에 커밋이 안되나요??
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@Jaeheon96 Jaeheon96 requested a review from wlgns2223 June 21, 2024 08:37
@Jaeheon96 Jaeheon96 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Jun 21, 2024

function App() {
return (
<div className="App">
Copy link
Collaborator

Choose a reason for hiding this comment

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

root가 컨텐츠를 감싸고 있는 역할을 하니까 여기 div는 없어도 될 것 같아요.

Copy link
Collaborator

Choose a reason for hiding this comment

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

페이지의 이동은 a 태그를 써주는게 더 자연스럽습니다.

Comment on lines +6 to +9
<div className="nav">
<NavTab text="자유게시판" active="deactive" />
<NavTab text="중고마켓" active="active" />
</div>
Copy link
Collaborator

Choose a reason for hiding this comment

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

순서의 의미가 없는 요소들을 나열하는 경우 ul 태그를 고려해보세요

}

function BestSection() {
const [items, setItems] = useState([])
Copy link
Collaborator

Choose a reason for hiding this comment

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

useState에 디폴트 상태 [] 좋습니다 !
데이터가 없을 경우 빈배열을 사용한다는 가정이 있어서 예상치 못한 동작을 할 확률이 줄어듭니다 !

Copy link
Collaborator

Choose a reason for hiding this comment

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

api 관련 함수를 다른 페이지에 정의 해주신 것 잘 하셨어요 !
앞으로 많은 api가 생길텐데 이렇게 함수로 따로 관리해주면 api 쪽 변경이 생길때 코드의 변경을 최소화 할 수 있어요.

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문을 통해 네트워크 통신 에러가 발생했을때 핸들링 할 수 있는 코드를 작성해주시면 좋을 것 같아요.

async function getProducts({ page = 1, pageSize = 10, orderBy = '', keyword = '' }) {

const query = `?page=${page}&pageSize=${pageSize}&orderBy=${orderBy}&keyword=${keyword}`
const response = await fetch(`https://panda-market-api.vercel.app/products` + query);
Copy link
Collaborator

Choose a reason for hiding this comment

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

https://panda-market-api.vercel.appbase url 이라고 합니다.
api 주소의 기본이 되는 부분인데, base url은 잘 바뀌지 않고 여러 api가 사용하기 때문에 전역변수 또는 환경변수로 관리해주시면 됩니다.

@@ -0,0 +1,11 @@
async function getProducts({ page = 1, pageSize = 10, orderBy = '', keyword = '' }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

디폴트 파라미터를 잘 사용하셨어요 !


const [items, setItems] = useState([]);
const [page, setPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
Copy link
Collaborator

Choose a reason for hiding this comment

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

setPageSizes는 사용되지 않고 있어요. 이런 상태는 일반 변수로 선언을 해주시면 됩니다.

Suggested change
const [pageSize, setPageSize] = useState(10);
const pageSize = 10


function ItemsSectionHeader({ orderBy, orderSetter, keywordSetter }) {

const dropdown = document.querySelector(".orderBy-dropdown");
Copy link
Collaborator

Choose a reason for hiding this comment

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

리액트에서 DOM에 직접적인 접근을 할 때는 useRef라는 것을 사용합니다.
https://ko.react.dev/reference/react/useRef

@wlgns2223
Copy link
Collaborator


반응형은 어떻게 해야할지 전혀 모르겠어서 구현하지 못했습니다... 찾아보니 styled component 활용한다는 것 같던데 다른 방법도 있나요?


스프린트 미션 1~4 하셨을때 처럼 css와 미디어 쿼리를 이용하셔도 반응형을 구현 할 수 있습니다.
스타일드 컴포넌트로도 할 수 있지만 반응형을 위해서 쓴다기보다 다른 목적을 가지고 있습니다.

@wlgns2223
Copy link
Collaborator


build 결과물은 원래 git에 커밋이 안되나요??


.gitignore 파일을 확인해보시면 /build 이 경로가 포함이 되어있습니다.
.gitignore 파일은 깃에 올리지 않을 파일을 명시해두는 곳입니다.
일반적으로 빌드파일은 깃에 올리지 않습니다.

@wlgns2223 wlgns2223 merged commit 35ae901 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