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

[손재헌] sprint7 #211

Conversation

Jaeheon96
Copy link
Collaborator

요구사항

기본

상품 상세

  • 상품 상세 페이지 주소는 “/items/{productId}” 입니다.

  • response 로 받은 아래의 데이터로 화면을 구현합니다.
    => favoriteCount : 하트 개수
    => images : 상품 이미지
    => tags : 상품태그
    => name : 상품 이름
    => description : 상품 설명

  • 목록으로 돌아가기 버튼을 클릭하면 중고마켓 페이지 주소인 “/items” 으로 이동합니다

상품 문의 댓글

  • 문의하기에 내용을 입력하면 등록 버튼의 색상은 “3692FF”로 변합니다.
  • response 로 받은 아래의 데이터로 화면을 구현합니다
    => image : 작성자 이미지
    => nickname : 작성자 닉네임
    => content : 작성자가 남긴 문구
    => description : 상품 설명
    => updatedAt : 문의글 마지막 업데이트 시간

심화

  • 심화 요구사항 없음

주요 변경사항

  • 아이템 목록 페이지에 반응형 구현
  • 로딩, 에러 핸들링 코드 개선

멘토에게

  • 상품 목록 페이지에서 반응형을 window.addEventListener로 구현했는데 처음부터 해당하는 창 크기로 들어가면 문제없이 동작하는데 창 크기를 일부러 조정할 때는 화면이 state를 반영하지 않는 등 잘 동작하지 않는 때가 있는 것 같습니다. 더 좋은 방법이 있을까요?
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@Jaeheon96 Jaeheon96 requested a review from wlgns2223 July 5, 2024 11:21
@Jaeheon96 Jaeheon96 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Jul 5, 2024
Comment on lines +28 to +32
const handleLoad = useCallback (async () => {
const result = await getProductByIdAsync(itemId);

setItem(result);
}, [getProductByIdAsync, itemId])
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기서 useCallback을 사용한 의도가 무엇일까요? ㅎㅎ
아마 당연히 최적화겠죠? 어떤 부분을 최적화하려고 하셨을까요?


const { itemId } = useParams();
const [item, setItem] = useState(INITIAL_ITEM_VALUE);
const [isLoading, error, getProductByIdAsync] = useAsync(getProductById);
Copy link
Collaborator

Choose a reason for hiding this comment

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

useAsync 활용을 잘 하시고 계시네요 ~ 커스텀 훅에 친숙해진다면 리액트 실력도 상승할꺼에요 !

<>
<Header />
<Container>
{(isLoading || error)
Copy link
Collaborator

Choose a reason for hiding this comment

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

isLoading , error 상태들을 이용해 로딩, 에러를 구현해주신 점 좋은 것 같습니다 !

Copy link
Collaborator

Choose a reason for hiding this comment

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

컴포넌트를 한 파일에 작성하기보다, 컴포넌트의 크기가 작더라도 따로 파일을 만들어서 관리를 해주세요.


const [comments, setComments] = useState([]);
const [cursor, setCursor] = useState(null);
const [isLoading, error, getCommentsAsync] = useAsync(getComments);
Copy link
Collaborator

Choose a reason for hiding this comment

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

useAsync를 이용해 loading, error, data를 다루는 패턴이 보여지네요 ㅎㅎ 좋은 패턴인 것 같습니다 ! 이렇게 유사한 요구사항들을 패턴화 시켜놓으면 코드 이해도가 올라갑니다.

Copy link
Collaborator

Choose a reason for hiding this comment

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

추가적으로 React suspense 와 ErrroBoundary에 대해서 학습해보세요.

  1. suspense: https://www.daleseo.com/react-suspense/
  2. errorBoundary: https://fe-developers.kakaoent.com/2022/221110-error-boundary/

return(
<>
<Header />
<Container>
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 부분이 styled-component로 되어있던데, 아무리 작은 컴포넌트라도 styled-component와 module css가 혼재되어있다면 좋지 않은 코드로 발전 할 가능성이 높습니다. 하나의 CSS체계를 갖추어주세요.

@wlgns2223
Copy link
Collaborator

상품 목록 페이지에서 반응형을 window.addEventListener로 구현했는데 처음부터 해당하는 창 크기로 들어가면 문제없이 동작하는데 창 크기를 일부러 조정할 때는 화면이 state를 반영하지 않는 등 잘 동작하지 않는 때가 있는 것 같습니다. 더 좋은 방법이 있을까요?

해당 컴포넌트에서 사용하는 state는 mediaWidth하나밖에 없던데 이 state가 어떻게 잘 반영이 안된다고 생각하시나요?
의도하신 동작은 무엇인가요?

@wlgns2223 wlgns2223 merged commit 1b113fa into codeit-bootcamp-frontend:React-손재헌 Jul 8, 2024
@SealBros SealBros added 미완성🫠 죄송합니다.. and removed 미완성🫠 죄송합니다.. labels Jul 10, 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.

3 participants