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

[김광호] sprint9 #260

Merged

Conversation

ouranos1
Copy link
Collaborator

요구사항

기본

  • 자유 게시판 페이지 주소는 “/boards” 입니다.
  • 전체 게시글에서 드롭 다운으로 “최신 순” 또는 “좋아요 순”을 선택해서 정렬을 할 수 있습니다.
  • 게시글 목록 조회 api를 사용하여 베스트 게시글, 게시글을 구현합니다.
  • 게시글 title에 검색어가 일부 포함되면 검색이 됩니다.

심화

  • 반응형으로 보여지는 베스트 게시판 개수를 다르게 설정할때 서버에 보내는 pageSize값을 적절하게 설정합니다.
  • next의 prefetch 기능을 사용해봅니다.

주요 변경사항

-9 미션을 완료했습니다.

  • prefetch 기능을 이해하지 못해서 사용하지 못 했습니다.

스크린샷

image

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@ouranos1 ouranos1 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Jul 19, 2024
@ouranos1 ouranos1 requested a review from Lanace July 19, 2024 01:59
@Lanace
Copy link
Collaborator

Lanace commented Jul 23, 2024

prefetch 기능은 이미 사용하고 계실껄요...ㅎㅎ
개발하신거에 링크위에 마우스 hover 해보시면 네트워크탭에서 무언가 request 를 보내고 있는걸 보실 수 있을꺼에요...!
그게 해당 페이지의 정보를 미리 불러와서 페이지 전환을 빠르게 하는거거든요

이부분은 멘토링 할때 자세히 살펴볼게요...!

Copy link
Collaborator

@Lanace Lanace left a comment

Choose a reason for hiding this comment

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

전반적으로 완성도가 많이 올라간것같네욬ㅋㅋㅋ
작업하느라 고생 많으셨어요...!!

function AllItemsSection() {
const [alltItemsList, setAllItemsList] = useState<AllItemProps[]>([]);
const [itemCount, setItemCount] = useState<number>(getWidth());
const [order, setOrder] = useState<string>("recent");
const [poninter, setPoninter] = useState<number>(1);
const [title, setTitle] = useState<string>("전체 상품");
const [pageSize, setPageSize] = useState<number>(0);
const option = {"recent" : "최신순", "favorite" : "좋아요순"};
Copy link
Collaborator

Choose a reason for hiding this comment

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

좋네요!
상수는 컴포넌트 외부에서 선언해주시는게 깔끔하거든요

Comment on lines 8 to -18
interface ArticlesProps {
id: number;
title: string;
content: string;
image: string | null;
likeCount: number;
createdAt: string;
updatedAt: string;
writer: {
id: number;
title: string;
content: string;
image: File | null;
likeCount: number;
createAt: Date;
updateAt: Date;
writer: {
id: number;
nickname: string;
};
}

nickname: string;
};
}

function BestArticles(articlesList: ArticlesProps[]) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

타입 정의하는걸 조금 개선하면 어떨까요?

props로 전달받는걸 item 으로 받고싶다면 Props의 interface에 item 을 넣어주는게 좀더 좋을것같아요!
이름이 정확한 의미를 담고있는게 좋거든요...ㅠ

ArticlesProps 에 각 타입에 대한 정보를 넣는게 아니라 분리시켜주는거죠!

type Article = {
  ...
}

interface ArticlesProps {
  item: Article;
}

요런식으로 의미를 중첩해서 사용하는것보단 분리하는거에요 ㅎㅎ

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 +27 to 38
{item.image ? (
<div className={style.articleImg}>
<Image src={item.image} alt="게시글 사진" fill />
</div>
) : (
<div>
<input></input>
<Image
src={BlackImg}
alt="빈 이미지"
className={style.blankImage}
/>
</div>
Copy link
Collaborator

Choose a reason for hiding this comment

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

이미지를 못가져왔을때의 처리인데, Image 에 onError 를 통해서 처리할 수 있어요!

https://nextjs.org/docs/pages/api-reference/components/image 여기에 props 보시면 될것같구,
간단한 예시는...
https://velog.io/@yung315/nextimage-Error-handling
이거 참고해보시면 좋을것같아요!


<p>{item.writer.nickname}</p>
<Image src={favoriteIcon} alt="하트아이콘" width={16} height={16} />
<p>{item.likeCount}</p>
Copy link
Collaborator

Choose a reason for hiding this comment

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

사소한거긴 한데, 숫자를 화면에 표시할떄 .toLocaleString() 을 해주는 습관을 들이시면 좋아요...!
완성도를 올리기 위해서.ㅎㅎ

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 +8 to +22
interface ArticlesProps {
id: number;
title: string;
content: string;
image: string | null;
likeCount: number;
createdAt: string;
updatedAt: string;
writer: {
id: number;
nickname: string;
};
}

function Article({ item }: {item : ArticlesProps }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기도 마찬가지일것같구요...

아까 타입을 잘 나눠두었으면 type ArticleType 을 export 해서 재활용 할 수 있을것같아요!ㅎㅎ

)
}

export default Recentarticles;
Copy link
Collaborator

Choose a reason for hiding this comment

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

endline 을 추가해주면 좋을것같아요...!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

맞습니다 아직 습관화가 덜 됬네요ㅠㅠㅠㅠ

Copy link
Collaborator

Choose a reason for hiding this comment

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

굳굳...! 잘 만드셨네욬ㅋㅋ 이런거 잘 만들어두면 유용하게 쓸 수 있어서 좋아요!

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 12 to 22
interface ArticlesProps {
id: number;
title: string;
content: string;
image: File | null;
image: string | null;
likeCount: number;
createAt: Date;
updateAt: Date;
createdAt: string;
updatedAt: string;
writer: {
id: number;
nickname: string;
Copy link
Collaborator

Choose a reason for hiding this comment

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

이것도 기존 타입 정의해둔걸 활용할 수 있겠네요!

곳곳에서 사용되는데, 아에 types 폴더를 만들고 ArticleType.ts 파일에 정의하는게 낫겠는데요...?ㅎㅎ

};
const { mode } = useDevice();
const bestCount = useMemo<number>(() => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

오... 메모 활용 잘 하셨네욯ㅎ 의존성으로 mode까지 잘 넣어주신것같습니다~!

@Lanace Lanace merged commit 925a43e into codeit-bootcamp-frontend:Next-김광호 Jul 23, 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