Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

훈돌라

2024. 7. 12. 프로젝트 트러블 슈팅 본문

카테고리 없음

2024. 7. 12. 프로젝트 트러블 슈팅

훈돌라 2024. 7. 12. 21:07

트러블 슈팅

문제
 likesData가 배열이 아니라 객체로 반환되는 문제,  likesData가 정의되지 않았거나 배열이 아닌 경우 발생하는 타입 오류, 데이터를 올바르게 정렬 및 상태 관리하는 데 어려움이 있음


 

원인
데이터 형태 불일치: likesData가 객체로 반환되어 배열 메서드를 사용하지 못하는 문제

데이터 비동기 처리: posts와 likesData가 비동기로 로드되기 때문에, 데이터가 아직 로드되지 않았을 때 코드를 실행하여 오류가 발생할 수 있음

타입스크립트 타입 안전성: likesData가 배열이 아닐 경우 타입스크립트에서 타입 오류가 발생


해결 방법

likesData의 타입을 명확히 하고, 배열인지 확인하는 로직을 추가하여 타입 안전성을 확보
useEffect 훅 내에서 likesData가 배열인 경우에만 좋아요 수를 계산하고 정렬하도록 조건문 추가
likesData와 posts가 모두 로드된 후에만 상태를 업데이트하도록 수정

 

 

const posts: Post[] = data ? data.posts : [];

  const {
    data: likesData,
    error: likesError,
    isLoading: likesLoading,
  } = useAllLikes();

  const [postsWithLikes, setPostsWithLikes] = useState<
    (Post & { likesCount: number })[]
  >([]);

  useEffect(() => {
    if (posts && likesData && Array.isArray(likesData.likes)) {
      const postsWithLikes = posts.map((post) => {
        const likesCount = likesData.likes.filter(
          (like: any) => like.post_id === post.post_id
        ).length;
        return { ...post, likesCount };
      });

      
      const sortedPosts = postsWithLikes.sort(
        (a, b) => b.likesCount - a.likesCount
      );
      setPostsWithLikes(sortedPosts);
    }
  }, [posts, likesData]);