게시글 좋아요 기능 구현 중 눌렀을 때 실시간으로 좋아요 개수가 반영되지 않고 개수에 undifined가 입력되는 오류 발생
응답 값이 200인 것으로 보아, 좋아요 클릭 시 게시글에 좋아요 개수가 반영되는 부분을 확인했다. 요청과 응답은 제대로 이루어지는데 그럼 코드내에 현재 바뀐 값으로 다시 초기 값 설정을 해줘야하는 부분에 문제가 있지 않을까? 라고 생각했다.
handleLikeBtn 함수에서 좋아요 버튼 클릭 시 서버에 좋아요를 반영하는 코드를 확인해보았습니다.서버에 좋아요를 반영하는 코드를 수정하여 좋아요 개수를 가져오고 상태를 업데이트하도록 했다
const handleLikeBtn = async () => {
try {
const response = await axios.put(
`/api/v1/group/${group_Id}/posts/${post_Id}/like`,
{},
);
if (response.status === 200) {
// 좋아요 버튼을 클릭한 후 좋아요 상태와 개수를 다시 가져옵니다.
fetchLikeStatus(group_Id, post_Id);
} else {
console.error('Error liking/unliking post:', response.status);
}
} catch (error) {
console.error('Error liking/unliking post:', error);
}
};
버튼을 클릭 했을 시 fetchLikeStatus 함수를 사용하여 좋아요 개수와 좋아요 상태를 가져오도록 했다.
const fetchLikeStatus = async (group_Id: number, post_Id: number) => {
try {
const response = await axios.get(
`/api/v1/group/${group_Id}/posts/${post_Id}/like`,
);
if (response.status === 200) {
const likeCount = response.data.data.likeNum;
const userLikedStatus = response.data.data.userLiked;
setLikeCounter(likeCount);// 상태 업데이트: 좋아요 개수
setIsLiked(userLikedStatus);// 상태 업데이트: 사용자 좋아요 상태
} else {
console.error('Error fetching like status:', response.status);
console.log('API Response:', response.data);
}
} catch (error) {
console.error('Error fetching like status:', error);
}
};
useEffect(() => {
if (group_Id && post_Id) {
// 컴포넌트가 마운트되거나 group_Id 또는 post_Id가 변경될 때
fetchLikeStatus(group_Id, post_Id);
}
}, [loginToken, group_Id, post_Id]);// 좋아요 상태를 가져오는 함수 호출
useEffect 훅 내에서 호출되어, 컴포넌트가 마운트될 때와 loginToken, group_Id, post_Id가 변경될 때마다 좋아요 상태를 가져오도록 설정했다.
undifined가 뜨지 않고 클릭 이벤트와 동시에 API 통신을 통해 값을 받아오기 시작했다 👍