특정 시점
인데 팀원 분인 unmount 될 때 데이터를 업로드하는 아이디어를 주셨다. useEffect(() => {
const increasedViews = post.views + 1;
const increasePostView = async (increasedViews, postId) => {
await updatePostViews(increasedViews, postId);
};
const increaseLikeNum = async (postId, userId) => {
await insertLikeUser(postId, userId);
};
const decreaseLikeNum = async (postId, userId) => {
await delLikeUser(postId, userId);
};
return () => {
increasePostView(increasedViews, postId);
if (user && !isDataHasUser && isLike) increaseLikeNum(postId, userId);
if (user && isDataHasUser && !isLike) decreaseLikeNum(postId, userId);
};
//eslint-disable-next-line
}, []);
const handleLikeClick = () => {
if (user) {
if(isLike){
setIsLike(false);
setLikeNum((prevNum) =>prevNum - 1);
}
else {
setIsLike(true);
setLikeNum((prevNum) => prevNum + 1);
}
} else {
navigate('/login');
}
};
아이디어로 제작한 코드
그러나 문제가 있었으니 useEffect에서 state 정보를 가지고 있지 않다는 것이었다...
그렇다면 useEffect에 state 정보를 전해주면 되는거 아닌가?
useEffect(() => {
const increasedViews = post.views + 1;
const increasePostView = async (increasedViews, postId) => {
await updatePostViews(increasedViews, postId);
};
const increaseLikeNum = async (postId, userId) => {
await insertLikeUser(postId, userId);
};
const decreaseLikeNum = async (postId, userId) => {
await delLikeUser(postId, userId);
};
return () => {
increasePostView(increasedViews, postId);
if (user && !isDataHasUser && isLike) increaseLikeNum(postId, userId);
if (user && isDataHasUser && !isLike) decreaseLikeNum(postId, userId);
};
//eslint-disable-next-line
}, [isLike]);
의존성 배열에 isLike라는 state를 넣은 코드
그렇다면 더 좋은 방법이 없을까??