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

[황병선] Sprint10 #273

Conversation

hbs0133
Copy link
Collaborator

@hbs0133 hbs0133 commented Jul 22, 2024

요구사항

기본

  • 상품 등록 페이지 주소는 “/addboard” 입니다.
  • 게시판 이미지는 최대 한개 업로드가 가능합니다.
  • 각 input의 placeholder 값을 정확히 입력해주세요.
  • 이미지를 제외하고 input 에 모든 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • ‘등록’ 버튼을 누르면 게시물 상세 페이지로 이동합니다.

심화

  • 상품 상세 페이지 주소는 “/addboard/{id}” 입니다.
  • 댓글 input 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • 활성화된 ‘등록' 버튼을 누르면 댓글이 등록됩니다

주요 변경사항

  • 미션 생성 및 ts변환

멘토에게

  • 아직 미완성입니다 ㅠ
  • 미션9의 코드리뷰를 아직 다 반영하지 못했습니다.
  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@hbs0133 hbs0133 requested a review from lhc0506 July 22, 2024 12:24
@hbs0133 hbs0133 added the 미완성🫠 죄송합니다.. label Jul 22, 2024
};
}

const BestPostCard = ({ item }: { item: PostItem }) => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

PostCard의 item 타입을 잘 설정해주셨어요!

혹시 item이라는 객체를 추가하신 이유가 있을까요?? 아래에서는 안쓰이는것 같아서요!

이렇게 사용되지 않으면 보통은 굳이 아래에서 구조분해할당 할 필요없이 props에서 부터 분해해준답니다!

const BestPostCard = ({
  content,
  image,
  likeCount,
  createdAt,
  writer: { nickname }
}: PostCardProps ) => {

이렇게요.
그리고 보통 type이름도 Props라는것을 명시해주는 편입니다! 만약 위 타입이 다른곳에서 쓰이지않는다면요

Comment on lines +28 to +34
const formatDate = (dateString: string) => {
const dateObj = new Date(dateString);
const year = dateObj.getFullYear();
const month = String(dateObj.getMonth() + 1).padStart(2, "0");
const day = String(dateObj.getDate()).padStart(2, "0");
return `${year}.${month}.${day}`;
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

date를 원하는 형식으로 변환해주는 함수를 잘만드셨어요!

이러한 함수는 다른곳에서도 유용하게 사용될 수 있고, 이 컴포넌트에서 분리를 위하여 utiil폴더를 만들어서 사용하면 더 좋을 것같아요!

추후 date-fnsDay.js 같이 시간변환 라이브러리도 함께 사용할 수 있어요!

const PostDetailSection = ({ item }: { item: PostItem }) => {
const {
content,
image,
Copy link
Collaborator

Choose a reason for hiding this comment

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

image가 사용되지 않는것같아요

Comment on lines +8 to +11
const [title, setTitle] = useState("");
const [content, setContent] = useState("");
const [ImageFile, setProductImageFile] = useState<File | null>(null);
const [filePreview, setFilePreview] = useState<string | null>(null);
Copy link
Collaborator

Choose a reason for hiding this comment

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

타입스크립트를 사용하여 state 초기값과 type 을 잘 설정해주셨어요!👍

Comment on lines +16 to +18
e:
| React.ChangeEvent<HTMLInputElement>
| React.ChangeEvent<HTMLTextAreaElement>,
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
e:
| React.ChangeEvent<HTMLInputElement>
| React.ChangeEvent<HTMLTextAreaElement>,
e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,

이렇게 합칠 수 있을 것 같아요!

keyWord,
}: QueryParams) => {
const response = await fetch(
`https://panda-market-api.vercel.app/articles?page=${page}&pageSize=${pageSize}&orderBy=${orderBy}${
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.app/articles가 중복되고 있죠?! 이부분도 상수로 뺄 수 있을 것 같아요

Comment on lines +19 to +20
const body = await response.json();
return body;
Copy link
Collaborator

Choose a reason for hiding this comment

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

body를 사용하거나 변환할 것이 아니면

Suggested change
const body = await response.json();
return body;
return await response.json();

바로 리턴해줘도 좋을 것 같습니다~

Comment on lines +31 to +37
export const getPostComment = async (id: number) => {
const response = await fetch(
`https://panda-market-api.vercel.app/articles/${id}/comments?limit=3`
);
const body = await response.json();
return body;
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

현재 아쉬운 부분은 에러처리가 전혀 없다는 것이에요.
물론 다른부분에서 에러가 나겠지만, 이 api가 문제다! 라는 게 없어서 디버깅하기가 어려울 것 같아요!

`https://panda-market-api.vercel.app/articles/${id}`
);
const body = await response.json();
return body;
Copy link
Collaborator

Choose a reason for hiding this comment

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

현재 body의 type을 보면 any로 되어있어요. 이건 서버에서 어떤값을 모르니 어쩔수 없이 타입스크립트가 이렇게 any로 해두는 거랍니다.

그래서 보통 type safe하게 하기 위해서 여기에 억지로 type을 넣어준답니다.
dto 혹은 schema interface 라고 하는데 이 부분은 조금 찾아보시면 좋을 것 같아요!

console.log(detailPost);
}, [id]);
return (
<>
Copy link
Collaborator

Choose a reason for hiding this comment

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

불필요한 fragment인것같아요!

@lhc0506 lhc0506 merged commit 0376212 into codeit-bootcamp-frontend:Next-황병선 Jul 25, 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