const { isAuthor, isVoted, isClosed, bestItem } = useSelector(
(state: any) => state.currentVote,
);
현재 전역 상태에 따라 다르게 보여야하는 것은
isVoted
isAuther
isClosed
종료된 투표라면 버튼에는 최종 투표율이 보이면서 가장 높은 투표율을 기록한 버튼의 배경이 파란색이 되어야 한다.
-> 가장 높은 투표율을 가지는 투표항목의 아이디를 전역상태로 만들어야 할지가 문제다!
-> 한번 종료된 투표의 상태는 변하지 않으니까 전역 상태로 만들었을 때 액션에 따라 여러번 리렌더링이 되는 상황은 발생하지 않을 것이다
-> 따라서 전역 상태로 만들기로 결정하였다
모달은 비활성화 되어야 한다.
bestItem
발생한 문제
1. 처음엔 투표가 종료됐으면서 최고 득표를 했거나, 투표가 종료되지 않았으면서 선택된 아이템이라면 동일하게 투표 아이템 버튼의 스타일을 동일하게 바꿔주려고 했다
useEffect(() => {
if (bestItem === id || isTopicVoteItemVoted === true) {
setIsSelected(true);
}
}, []);
//완성된 커스텀 훅
import React, { useEffect, useState } from 'react';
export const useChangeImageItems = (
id: number,
isClosed: boolean,
bestItem: number,
isTopicVoteItemVoted: boolean,
) => {
const [isChangedComponent, setIsChangedComponent] = useState(false);
useEffect(() => {
if (isClosed === true) {
if (bestItem === id) {
setIsChangedComponent(false);
} else {
setIsChangedComponent(true);
}
} else if (isClosed === false) {
if (isTopicVoteItemVoted === true) {
setIsChangedComponent(true);
} else {
setIsChangedComponent(false);
}
}
}, []);
return isChangedComponent;
};
export const useChangeTextItems = (
id: number,
isClosed: boolean,
bestItem: number,
isTopicVoteItemVoted: boolean,
) => {
const [isChangedComponent, setIsChangedComponent] = useState(false);
useEffect(() => {
if (isClosed === true) {
if (bestItem === id) {
setIsChangedComponent(true);
} else {
setIsChangedComponent(false);
}
} else if (isClosed === false) {
if (isTopicVoteItemVoted === true) {
setIsChangedComponent(true);
} else {
setIsChangedComponent(false);
}
}
}, []);
return isChangedComponent;
};
텍스트 투표 아이템
이미지 투표 아이템(수정 전)
이미지 투표 아이템(수정 후)