Likelion-YeungNam-Univ / 12th-BeginnerFit-FE

헬스/관리/운동 등에 무지한 사람들 위해 나에게 맞는 홈트 영상 추천/운동 종목 추천 해주는 서비스
http://43.201.203.128:5173/
3 stars 2 forks source link

bug:새 댓글 작성 오류 수정 #25

Closed tkv00 closed 4 months ago

tkv00 commented 4 months ago

구현내용

const useCommentStore = create((set) => ({ commentCounts: {}, //각 게시물ID가 키,댓글 수를 값 //댓글 수 업데이트 함수 setCommentCount: (postId, count) => set((state) => ({ commentCounts: { ...state.commentCounts,

  },
})),

//특정 게시물의 댓글 수 1씩 증가 함수 incrementCommentCount: (postId) => set((state) => ({ commentCounts: { ...state.commentCounts, postId: (state.commentCountspostId || 0) + 1, // 기존 값이 없으면 0에서 시작 }, })),

// 특정 게시물의 댓글 수를 1 감소시키는 함수

decrementCommentCount: (postId) => set((state) => ({ commentCounts: { ...state.commentCounts,

    [postId]: Math.max((state.commentCounts[postId] || 0) - 1, 0),
  },
})),

}));

export default useCommentStore;

<hr/>

### 새댓글 작성 시 바로 댓글 리스트에 올리는 방식
1. ` Zustand`에서 해당 게시물의 댓글을 관리->새 댓글 작성 시 댓글리스트를 업데이트하는 방식->댓글이 2배씩 생성되는 오류 발생
2. `useState`로 댓글을 관리하고 `getCommentApi`를 호출하여 댓글을 불러온다->새 댓글 작성 시 댓글배열을 초기화하고 `getCommentApi`를 다시 한 번 호출하여 댓글리스트를 불러온다.
```javascript
const handleCommentSubmit = async () => {
    // 빈 댓글 작성 시 버튼 클릭 금지 및 비활성화
    if (isCommentEmpty) return;

    try {
      //새 댓글 작성
      await commentApi(post.id, comment);
      // 입력칸 초기화
      setComment("");

      setPage(1);
      //댓글 배열 초기화
      setComments([]);
      //새 댓글이 작성된 새로운 댓글 목록 불러오기.
      await getCommentApi(post.id, 1, setComments, setIsLoading, setHasMore);
    } catch (error) {
      console.log("댓글 전송 실패", error);
    }
  };
jihyun132 commented 4 months ago

수고하셨습니다!