오늘 지난 주에 구현했던 좋아요 기능에서 firebase 오류가 생겼다.
좋아요 기능에서 firebase 오류가 생겼다.
Uncaught (in promise) FirebaseError: Function arrayRemove() called with invalid data. Unsupported field value: undefined (found in document courses/...)
Uncaught (in promise) FirebaseError: Function updateDoc() called with invalid data. Unsupported field value: undefined (found in field likes in document courses/...)
첫번째 오류메시지는 updateDoc
을 하면서 넘겨주는 likeCount
가 undefined
여서 발생하는 오류이고,
두번째 오류메시지는 useEffect()
로 맨 처음 랜더링할때, currnetId
를 받아오기 전에 arrayRemove(currnetId)
를 실행시켜서 발생한 오류였다.
useEffect(() => {
const updateLikes = async () => {
if (like) {
await updateDoc(courseRef, {
likes: likeCount || null,
likesID: arrayUnion(currentId),
});
} else {
await updateDoc(courseRef, {
likes: likeCount || null,
likesID: arrayRemove(currentId),
});
}
};
if (!currentId) return;
updateLikes();
}, [like, likeCount]);
updateDoc
오류는 likes
에 likeCount
이거나 null
을 넘기도록 수정함으로써 해결했고,
arrayRemove(currnetId)
오류는 updateLikes
함수가 실행되기 전에, currnetId
가 없는 경우에 실행시켜줄 코드를 추가함으로써 해결할 수 있었다.
import { useEffect, useRef } from "react";
export const useUpdateEffect = (func, deps) => {
const didMount = useRef(false);
useEffect(() => {
if (didMount.current) func();
else didMount.current = true;
}, deps);
};