사용자가 목록에서 읽고 싶은 게시글을 클릭하면 해당 게시글 상세 페이지로 이동한다.
백엔드에서 넘어오는 데이터는 다음과 같다.
- 게시글 id
- 게시글 카테고리
- 게시글 제목
- 작성자 멤버 id
- 게시글 작성자 닉네임
- 게시글 작성자 프로필 사진
- 게시글 작성 시간
- 좋아요 (눌렀으면 1, 아니면 0)
- 좋아요 개수
- 북마크 (눌렀으면 1, 아니면 0)
- 고정 (눌렀으면 1, 아니면 0)
- 태그
- 태그 id
- 태그
- 댓글
- 댓글 id
- 작성자 닉네임
- 작성자 프로필 사진
- 작성 시간
- 내용
- parent id
한번에 이 모든 데이터가 넘어오기 때문에, Post Detail이라는 전체를 조합하는 컴포넌트(페이지)에서 이 데이터를 받고 Props로 각 컴포넌트에 필요한 데이터를 내려주기로 했다.
페이지를 구성하는 큰 단위의 컴포넌트는 다음과 같다.
- Post Title: 최상단의 제목란, 게시글 제목과 각 버튼 및 작성자 정보, 작성 날짜, 좋아요와 댓글 총 개수
- Post Address: 작성자가 적은 주소
- Post Content: 게시글 내용
- Post Tags: 태그
- Post Buttons: 게시글 작성자 및 관리자에게만 보이는 게시글 수정 및 삭제 버튼과 해당 카테고리 게시글 목록으로 가는 버튼
<PostTitle
boardId={post.boardId}
title={post.title}
now={post.now}
pick={post.pick}
pin={post.pin}
likeCheck={post.likeCheck}
likeCount={post.likeCount}
bookmark={post.bookmark}
nickName={post.nickName}
userPhoto={post.userPhoto}
/>
<PostAddress address={post.address} />
<PostContent content={post.content} />
<PostTags tags={post.tags} />
<PostButtons
memberId={post.memberId}
handleDeletePost={handleDeletePost}
boardId={post.boardId}
category={post.category}
/>
<CommentList boardId={post.boardId} />
회고
프로젝트 하면서 멘토님께 배운 건 인터페이스를 백엔드와 같이 짰어야 했다는 것이다.
API 명세서나 뭐나 다 백엔드 쪽! 우리는 할 거 없음! 으로 단순하게 생각하는 바람에, 백엔드에서 엔드포인트나 params가 어떤 이름으로 어떻게 넘어올 건지 대충 예상만 하면서 남는 시간 동안 디자인 중심 레이아웃을 먼저 짰다.
그러다보니 컴포넌트들을 잘 세분화해서 나누지 못했던 것 같고, 특히나 나중에 댓글과 대댓글을 구현하는 부분에서 애를 먹었던 거 같다.
또 프로젝트 동안에는 이렇게 다량의 데이터가 넘어왔을 때 GraphQL로 필요한 데이터만 받아올 수 있다는 것을 생각하지 못했다. 리팩토링 advanced challenge로 도전해봐야겠다.
'Development > Frontend' 카테고리의 다른 글
Elog: Event Bubbling (0) | 2024.05.02 |
---|---|
[회원 정보 수정] react-hook-form (0) | 2023.07.19 |
[게시글 상세] 댓글 대댓글 CRUD (1) | 2023.07.01 |
[Navbar] Redux-toolkit 활용: 로그인/비로그인 구분, 프로필 관리 (1) | 2023.06.09 |
프로젝트 시작하기: Vite + React in TypeScript + ESLint + Prettier (2) | 2023.06.06 |