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

Conversation

leesh7048
Copy link
Collaborator

@leesh7048 leesh7048 commented Jul 5, 2024

요구사항

기본

상품 상세

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

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

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

상품 문의 댓글

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

스크린샷

image image

멘토에게

  • detail procut와 comments 가져오는 fetch함수 컴스텀훅으로 만들어볼려고했다가 오류가 왕창떠버려서 원래대로 돌아왔습니다
    주말에 다시 시도해보겠습니다.
  • 모든 api함수와 연결해서 데이터가져올수있는 커스텀 훅을 만들고싶었는데 실패했습니다..ㅠ 일단 detail procut와 comments 데이터 가져오는 hook 만들었습니다

배포

https://panda-market-sprint7.netlify.app/

@leesh7048 leesh7048 requested a review from wlgns2223 July 5, 2024 14:27
@leesh7048 leesh7048 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Jul 5, 2024
if (!getData) {
throw new Error("데이터를 불러오지 못했습니다.");
}
setData((data) => ({ ...data, getData }));
Copy link
Collaborator

Choose a reason for hiding this comment

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

재사용성을 염두에 두고 직접 개발하신 hook같은데 혹시 맞을까요?
data가 어떻게 쓰일지 모르는 상황에서 이전 데이터를 전개구문을 이용해서 유지한채 새 데이터를 덮어씌우면 예상치 못하게 전 데이터가 남아있을 수 있겠다라는 생각이 드네요.
전개구문을 이용해서 ( { ... data } ) 이전 데이터를 유지하지말고, getData로 치환하는게 좋다고 생각합니다.

Comment on lines +3 to +11
function useAsync(asyncFunction, arg) {
// pending, error 상태값을 status: '대기중', '로딩중' , '완료', '에러'로 바꾸기
const [fetchStatus, setFetchStatus] = useState("");
const [data, setData] = useState({});
const getFetchData = useCallback(async () => {
setFetchStatus("대기중");

try {
const getData = await asyncFunction(arg);
Copy link
Collaborator

Choose a reason for hiding this comment

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

파라미터로 argsasyncFunction을 따로 받기보다 한번에 받아버리는건 어떨까요 ? 제 생각에는 함수를 리턴하는 함수를 이용해 할 수 있을 것 같습니다.

(arg) => () => asyncFunction 처럼 코드를 작성하시면되는데 혹시 이해가 가실까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

아뇨 잘 이해가 안되네요 ..

Comment on lines +34 to +41
if (fetchStatus === "에러") {
alert("error");
return;
}

if (fetchStatus !== "완료") {
return <Loading>loading중</Loading>;
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

fetchStatus로 데이터 요청의 상태를 관리하신 점 잘 하셨습니다 !

<ProductContentLabel>상품 태그</ProductContentLabel>
<ProductTagsSection>
{tags.map((tag) => (
<ProductTag key={uuidv4()}>#{tag}</ProductTag>
Copy link
Collaborator

Choose a reason for hiding this comment

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

키를 유니크하게 가져가기 위해서 uuid를 사용해주셨네요 ! tag가 고유하다면 tag를 그대로 사용해도 되긴 합니다 ㅎㅎ

uuid를 사용해도되고 tag를 사용해도 됩니다. ~

Suggested change
<ProductTag key={uuidv4()}>#{tag}</ProductTag>
<ProductTag key={tag}>#{tag}</ProductTag>

Comment on lines +78 to +88
{fetchStatus === "완료" &&
(comments.list.length === 0 ? (
<InquiryEmptyBox>
<InquiryEmptyImg src={inquiryEmptyImg} />
<InquiryEmptyText>아직 문의가 없습니다.</InquiryEmptyText>
</InquiryEmptyBox>
) : (
comments.list.map((comment) => (
<CommentCard key={comment.id} comment={comment} />
))
))}
Copy link
Collaborator

Choose a reason for hiding this comment

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

fetchStatus에 따라서 코멘트 UI를 잘 정리해주셨습니다 !

Comment on lines +67 to +68
<InquiryCommentLabel>문의하기</InquiryCommentLabel>
<InquiryCommentTextArea
Copy link
Collaborator

Choose a reason for hiding this comment

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

labelhtmlFor 속성으로 어느 입력태그를 위한 것인지 나타내면 좋겠네요 ㅎㅎ

@wlgns2223
Copy link
Collaborator

모든 api함수와 연결해서 데이터가져올수있는 커스텀 훅을 만들고싶었는데 실패했습니다..ㅠ 일단 detail procut와 comments 데이터 가져오는 hook 만들었습니다

useAsync를 이용해서 만드신거죠? 제 생각에는 useAsync 자체로도 재 사용성이 높아서 이것도 나름 잘 활용하면 좋다고 생각하거든요.
조금 더 리팩토링 할 수 있겠다는 생각이 들어서 다음 멘토링 시간에 말하면 좋을 것 같아요.

@wlgns2223 wlgns2223 merged commit 7928ede into codeit-bootcamp-frontend:React-이승현 Jul 8, 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